OrderByLINQ拡張機能を使用するのは非常に簡単です(他の人の回答を参照してください)。
を使用する場合は、次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. 一方、新しいリスト オブジェクトを取得するために呼び出すことができるOrderBynew を作成します。古いオブジェクトは変更されません。元のリストを保持していた変数に新しいオブジェクトを割り当てることができます。古いオブジェクトを参照する他の変数は、その影響を受けません。例: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ます。