2

LINQを使用して遠隔ソートを実行できるかどうか疑問に思っていました。たとえば、数値のリストがあります。

List< int > numbers = new List< int >

  • 1
  • 2
  • 3
  • 15<-並べ替え
  • 11<-並べ替え
  • 13<-並べ替え
  • 10<-並べ替え
  • 6
  • 7

を使用numbers.Skip(3).Take(4).OrderBy(blabla)するだけで機能しますが、これらの4つの数値のみを含む新しいリストが返されます。どういうわけか、新しい「部分的な」リストを返さずにLINQを強制的に動作させたり、ソートされた部分を含む完全なリストを受け取ったりすることは可能ですか?答えてくれてありがとう!

4

5 に答える 5

6

次のようなものを試してください。

var partiallySorted = list.Where(x => x < 11)
                 .Concat(list.Where(x => x >= 11 && x <=15).OrderBy(/*blah*/)))
                 .Concat(list.Where(x => x > 15));
于 2012-10-13T19:29:08.813 に答える
4
List<int> list = new List<int>() {1,2,3,15,11,13,10,6,7};
list.Sort(3, 4,Comparer<int>.Default);
于 2012-10-13T17:20:21.983 に答える
2

いくつかの基準に基づいて必要な範囲を取得し、Linqを使用して結果の範囲に並べ替えを適用するだけです。

List<int> numbers = new List<int>() { 15, 4, 1, 3, 2, 11, 7, 6, 12, 13 };
var range = numbers.Skip(3).Take(4).OrderBy(n => n).Select(s => s);
// output: 2, 3, 7, 11
于 2012-10-13T17:08:40.630 に答える
1

これをデフォルトのインラインリストソートに使用します。

構文:List.Sort(開始インデックス、要素数、デフォルトの比較)

List<int> numbers = new List<int> { 1, 2, 3, 15, 11, 13, 10, 6, 7 };
numbers.Sort(3, 6, Comparer<int>.Default);

要素の[プロパティ/属性]または正確に何か他のもので並べ替える場合は、以下の方法を使用します。

文字列を文字数で並べ替え、2番目の要素からリストの最後まで並べ替えました。

構文:List.Sort(開始インデックス、要素数、カスタム比較)

List<string> str = new List<string> { "123", "123456789", "12", "1234567" };
str.Sort(1, str.Count - 1, Comparer<string>.Create((x, y) => x.Length.CompareTo(y.Length)));
于 2018-04-07T19:53:44.840 に答える
0

いいえ、Linq拡張メソッドが基になるリストを変更することはありません。このメソッドList<T>.Sort(int index, int counter, IComparer<T> comparer)を使用して、インプレースソートを実行できます。

var list = new List<int> {1, 2, 3, 15, 11, 13, 10, 6, 7};
list.Sort(3, 4, null);
于 2012-10-13T17:31:06.797 に答える