给定一个包含三个必须始终位于顶部的元素的列表:
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))
给定一个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);