1

给定一个包含三个必须始终位于顶部的元素的列表:

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

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

提前感谢任何提示!

4

4 回答 4

6

取前三个项目,然后与排序的余数连接。

lst.Take(3).Concat(lst.Skip(3).OrderBy(s=>s);
于 2013-06-24T17:54:07.417 回答
1

尝试使用这个:

list.Take(3).Concat(list.Skip (3).OrderBy (x => x.Name))
于 2013-06-24T17:53:42.093 回答
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。;)

如果可以使用就地排序,效率会更高。

于 2013-06-24T17:59:09.670 回答
1
var final = lst.Take(3).ToList(); ;

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

final.AddRange(sortedSet);
于 2013-06-24T18:01:12.930 回答