2

正如标题所说。我想在列表中执行和排序 - 但在列表的一个小节上。准确地说,我想对除第一个元素之外的每个元素进行排序。

编辑:为了澄清,我需要在所有排序完成后保留所有(甚至是未排序的)元素。(即第一个项目(未排序)保持在它所在的位置(在列表的开头)并且所有后续项目都已排序)。

4

4 回答 4

3

我认为如果你想在结尾处开始未排序的项目,这应该可以工作:

list.Take(1).Concat(list.Skip(1).OrderBy(xyz));
于 2012-06-20T15:25:04.123 回答
3

你可以使用:

list.Take(1).Concat(list.Skip(1).OrderBy(predicate))
于 2012-06-20T15:26:19.740 回答
3

像这样的东西应该工作:

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();
于 2012-06-20T15:27:30.260 回答
1

您可以获取索引,并将其用作排序的一部分,而不是删除第一项然后将其添加回(其他出色答案显示的方法):

list.Select((value, index) => new { value, index })
    .OrderBy(x => x.index != 0)
    .ThenBy(x => x.value)
    .Select(x => x.value)
    .ToList()
于 2012-06-20T15:29:39.333 回答