OrderBy
LINQ拡張機能を使用するのは非常に簡単です(他の人の回答を参照してください)。
を使用する場合は、次Sort
のようになります。
myList.Sort((x, y) => MyScoreEvaluator("York", x.Name)
.CompareTo(MyScoreEvaluator("York", y.Name)));
myList
これは、であると仮定しSystem.Collections.Generic.List<>
ます。
他のソート方向が必要な場合は、もちろん、ラムダ矢印の片側でスワップx
します。y
=>
編集:
.Sort
メソッド onは同じインスタンスをList<>
変更することを忘れないでください。Sort
メソッドの戻り値の型はvoid
. 一方、新しいリスト オブジェクトを取得するために呼び出すことができるOrderBy
new を作成します。古いオブジェクトは変更されません。元のリストを保持していた変数に新しいオブジェクトを割り当てることができます。古いオブジェクトを参照する他の変数は、その影響を受けません。例:IEnumerable<>
.ToList()
myList = myList.OrderBy(f => MyScoreEvaluator("York", f.Name)).ToList();
新しい編集:
パフォーマンスが問題になる場合、これら 2 つのどちらを使用するかは明確ではありません。このOrderBy
メソッドは、MyScoreEvaluator
元のリストのアイテムごとに 1 回だけ呼び出します。ここSort
に示すメソッドはMyScoreEvaluator
、各呼び出しの結果を「記憶」していないため、より多くの回数をMyScoreEvaluator
呼び出します (Comparison<>
デリゲート インスタンスはSort
アルゴリズムのブラック ボックスです)。したがって、 と を比較したい場合"Fork"
は、 2 回"Kork"
呼び出します。MyScoreEvaluator
その後、比較したい場合"Kork"
は"Yorc"
再度行い"Kork"
MyScoreEvaluator
ます。一方、 のソート アルゴリズムは のソート アルゴリズムよりList<>.Sort
も優れていOrderBy
ます。