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 に答える