Страницы

Поиск по вопросам

среда, 29 января 2020 г.

Сортировка List по нескольким полям

#c_sharp


В List<> хранятся объекты, которые необходимо отсортировать по нескольким полям одновременно.
Подскажите, пожалуйста, как это сделать.    


Ответы

Ответ 1



Через LINQ запись будет выглядеть даже проще: IEnumerable result = nonSorted.OrderBy(x => x.value1).ThenBy(x => x.value2); Если хотите избежать ленивых вычислений, то можно сразу спроектировать результат в IList<>: IList result = nonSorted.OrderBy(x => x.value1).ThenBy(x => x.value2).ToList();

Ответ 2



Ordering Operators должно помочь string[] digits = { "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine" };//c List тоже будет работать var sortedDigits = from d in digits orderby d.Length, d select d; one six two five four nine zero eight seven three

Ответ 3



Лист уже сам по себе все умеет: static int comparison< T >(T a, T b){/сравнение по нужному алгоритму/} .... list.Sort(comparison); либо если можно изменять класс, экземпляры которого лежат в листе, то: private class MyClass:IComparable< MyClass > { public int CompareTo(MyClass other){ // сравнение по нужному алгоритму } } и будет достаточно вызвать метод Sort без параметров.

Ответ 4



Если Вам нужно отсортировать исходный список, используйте Comparison, который предлагает Дмитрий Ложкин. Если Вам нужно получить новый отсортированный список на основе старого, то используйте Linq.

Комментариев нет:

Отправить комментарий