正如标题所说。我想在列表中执行和排序 - 但在列表的一个小节上。准确地说,我想对除第一个元素之外的每个元素进行排序。
编辑:为了澄清,我需要在所有排序完成后保留所有(甚至是未排序的)元素。(即第一个项目(未排序)保持在它所在的位置(在列表的开头)并且所有后续项目都已排序)。
正如标题所说。我想在列表中执行和排序 - 但在列表的一个小节上。准确地说,我想对除第一个元素之外的每个元素进行排序。
编辑:为了澄清,我需要在所有排序完成后保留所有(甚至是未排序的)元素。(即第一个项目(未排序)保持在它所在的位置(在列表的开头)并且所有后续项目都已排序)。
我认为如果你想在结尾处开始未排序的项目,这应该可以工作:
list.Take(1).Concat(list.Skip(1).OrderBy(xyz));
你可以使用:
list.Take(1).Concat(list.Skip(1).OrderBy(predicate))
像这样的东西应该工作:
var results = list.Take(1)
.Concat(list.Skip(1).OrderBy(x => x.Something))
.ToList();
编辑:
由于发布问题已被编辑以澄清未排序的项目应位于集合的“末尾”,因此可以通过对上述内容进行微小更改来实现(只需切换方法调用):
var results = list.Skip(1)
.OrderBy(x => x.Something)
.Concat(list.Take(1))
.ToList();
您可以获取索引,并将其用作排序的一部分,而不是删除第一项然后将其添加回(其他出色答案显示的方法):
list.Select((value, index) => new { value, index })
.OrderBy(x => x.index != 0)
.ThenBy(x => x.value)
.Select(x => x.value)
.ToList()