在某个位置之后使用lambda按字母顺序对列表进行排序

时间:2013-06-24 17:42:42

标签: c# list sorting lambda

给定一个包含三个元素的列表必须始终保持在顶部:

Stay@Top1
Stay@Top2
Stay@Top3
Chicken
Bull
Zebra
Elephant
Hippo

使用lamdba表达式,如何从“Chicken”开始按字母顺序对此列表进行排序,并将前三个元素保持在顶部?

提前感谢任何提示!

4 个答案:

答案 0 :(得分:6)

取三个第一项,然后与排序的剩余部分连接。

lst.Take(3).Concat(lst.Skip(3).OrderBy(s=>s);

答案 1 :(得分:1)

尝试使用:

list.Take(3).Concat(list.Skip (3).OrderBy (x => x.Name))

答案 2 :(得分:1)

给定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。 ;)

如果你可以使用它,那么就地排序会更有效率。

答案 3 :(得分:1)

var final = lst.Take(3).ToList(); ;

var sortedSet = lst.Skip(3).OrderBy(x => x);

final.AddRange(sortedSet);