Упорядочить список (C#) по многим полям? [дубликат]
этот вопрос уже есть ответ здесь:
Я хочу упорядочить список объектов в C# по многим полям, а не только по одному. Например, предположим, что у меня есть класс X с двумя атрибутами A и B, и у меня есть следующие объекты, в которых порядок:
object1 = > A = "a", B = "h"
объект2 => А = "А", " Б " = "с"
object3 => A = "b", B = "x"
object4 => A = "b", B = "b"
и я хочу сначала упорядочить список по атрибуту, а когда они равны, по элементу B, поэтому порядок будет:
"a" "c"
"a" "h"
"б" "б"
"б", "х"
насколько я знаю, порядок метода OrderBy по одному параметру.
вопрос: Как я могу заказать список C# по нескольким полям?
большое спасибо
4 ответов:
использовать
ThenBy:
Customer.OrderBy(c => c.LastName).ThenBy(c => c.FirstName)см. MSDN:http://msdn.microsoft.com/en-us/library/bb549422.aspx
Да, вы можете сделать это, указав метод сравнения. Преимущество в том, что сортируемый объект не должен быть IComparable
aListOfObjects.Sort((x, y) => { int result = x.A.CompareTo(y.A); return result != 0 ? result : x.B.CompareTo(y.B); });
сделать ваш объект что-то вроде
public class MyObject : IComparable { public string a; public string b; virtual public int CompareTo(object obj) { if (obj is MyObject) { var compareObj = (MyObject)obj; if (this.a.CompareTo(compareObj.a) == 0) { // compare second value return this.b.CompareTo(compareObj.b); } return this.a.CompareTo(compareObj.b); } else { throw new ArgumentException("Object is not a MyObject "); } } }также обратите внимание, что возвращает для CompareTo:
http://msdn.microsoft.com/en-us/library/system.icomparable.compareto.aspx
затем, если у вас есть список MyObject, позвоните .Сортировать (), т. е.
var objList = new List<MyObject>(); objList.Sort();
ваш объект должен реализовывать IComparable интерфейс.
С его помощью ваш класс становится новой функцией под названием
CompareTo(T other). В рамках этой функции вы можете сделать любое сравнение между текущим и другим объектом и вернуть целое значение, если первое больше, меньше или равно второму.
Comments