Я хочу отсортировать список на С#.
Как и в случае, когда свойство структуры AVC переходит в true, сначала показывайте его, затем AVC переходит в значение false. Есть ли способ сделать это в С# LINQ?
Я хочу отсортировать список на С#.
Как и в случае, когда свойство структуры AVC переходит в true, сначала показывайте его, затем AVC переходит в значение false. Есть ли способ сделать это в С# LINQ?
Ну, самый простой способ использования LINQ будет примерно таким:
list = list.OrderBy(x => x.AVC ? 0 : 1)
.ToList();
или
list = list.OrderByDescending(x => x.AVC)
.ToList();
Я считаю, что естественный порядок значений bool
равен false < true
, но первая форма делает его более понятным ИМО, потому что все знают, что 0 < 1
.
Обратите внимание, что это не приведет к сортировке самого исходного списка - он создаст новый список и вернет ссылку обратно переменной list
. Если вы хотите сортировать на месте, вы должны использовать метод List<T>.Sort
.
Как это?
В LINQ:
var sortedList = originalList.OrderBy(foo => !foo.AVC)
.ToList();
Или на месте:
originalList.Sort((foo1, foo2) => foo2.AVC.CompareTo(foo1.AVC));
Как говорит Джон Скит, трюк здесь означает, что false
считается "меньшим", чем true.
Если вы обнаружите, что выполняете эти операции упорядочения в разных местах своего кода, вы можете получить свой тип Foo
для реализации интерфейсов IComparable<Foo>
и IComparable
.
Я предполагаю, что вы хотите, чтобы они были отсортированы с помощью чего-то еще, чтобы получить последовательный порядок между всеми элементами, где AVC одинакова. Например, по имени:
var sortedList = list.OrderBy(x => c.AVC).ThenBy(x => x.Name).ToList();