给定一个包含三个元素的列表必须始终保持在顶部:
Stay@Top1
Stay@Top2
Stay@Top3
Chicken
Bull
Zebra
Elephant
Hippo
使用lamdba表达式,如何从“Chicken”开始按字母顺序对此列表进行排序,并将前三个元素保持在顶部?
提前感谢任何提示!
答案 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);