使用LINQ在C#中对列表进行sorting
我想在C#中对列表进行sorting。
就像结构属性AVC变为true的地方一样,先显示它们,然后AVC变成false。 有没有办法在C#LINQ做到这一点?
那么,使用LINQ最简单的方法是这样的:
list = list.OrderBy(x => x.AVC ? 0 : 1) .ToList();
要么
list = list.OrderByDescending(x => x.AVC) .ToList();
我相信 bool
值的自然sorting是false < true
,但是第一种forms使IMO更清晰,因为每个人都知道0 < 1
。
请注意,这不会对原始列表本身进行sorting – 它将创build一个新列表,并将该参考分配回list
variables。 如果你想sorting,你应该使用List<T>.Sort
方法。
喜欢这个?
在LINQ中:
var sortedList = originalList.OrderBy(foo => !foo.AVC) .ToList();
或就地:
originalList.Sort((foo1, foo2) => foo2.AVC.CompareTo(foo1.AVC));
正如Jon Skeet所说,这里的诀窍是知道false
被认为比true.
“小” true.
如果您发现您在代码中的许多不同位置执行这些sorting操作,则可能需要让您的Foo
types实现IComparable<Foo>
和IComparable
接口。
我假设你想让他们按其他东西sorting,以获得AVC是相同的所有项目之间的一致的顺序。 例如按名称:
var sortedList = list.OrderBy(x => c.AVC).ThenBy(x => x.Name).ToList();