【发布时间】:2013-06-24 17:42:42
【问题描述】:
给定一个包含三个必须始终位于顶部的元素的列表:
Stay@Top1
Stay@Top2
Stay@Top3
Chicken
Bull
Zebra
Elephant
Hippo
使用 lamdba 表达式,如何按字母顺序对列表进行排序,从“鸡”开始,并将前三个元素保持在顶部?
提前感谢任何提示!
【问题讨论】:
给定一个包含三个必须始终位于顶部的元素的列表:
Stay@Top1
Stay@Top2
Stay@Top3
Chicken
Bull
Zebra
Elephant
Hippo
使用 lamdba 表达式,如何按字母顺序对列表进行排序,从“鸡”开始,并将前三个元素保持在顶部?
提前感谢任何提示!
【问题讨论】:
取前三个项目,然后与排序后的余数连接。
lst.Take(3).Concat(lst.Skip(3).OrderBy(s=>s);
【讨论】:
试试这个:
list.Take(3).Concat(list.Skip (3).OrderBy (x => x.Name))
【讨论】:
DbSet。可以接受也可以离开。
Concat,那么您应该使用AsEnumerable。它实现了该目标,而不会产生创建列表和迭代序列的性能成本,并且它还在语义上表示您正在尝试实现的目标。
给定一个List<T>,您希望对其进行排序但将前三个元素保留在开头,您可以使用List<T>.Sort(int index, int count, IComparer<T> comparer) 的重载,它允许您指定要排序的元素范围。
所以你可以这样做(假设List<string>):
lst.Sort(3, lst.Length - 3, Comparer<string>.Default);
这并没有像您要求的那样使用 lambda - 但我不明白您为什么需要使用 lambda。 ;)
如果可以使用就地排序,效率会更高。
【讨论】:
var final = lst.Take(3).ToList(); ;
var sortedSet = lst.Skip(3).OrderBy(x => x);
final.AddRange(sortedSet);
【讨论】: