0

私は、2 つの文字列を指定すると、それらがどの程度似ているかを表す数値 (0 から 100 の間) を返すメソッドを持っています。

今問題は、関数の戻り値に基づいて並べ替えたい郡 (文字列名、GeoRef 座標、文字列 Mayor) のリストがあることです...
次のようなものを探していますmyList.Sort(f=>MyScoreEvaluator("York",f.Name))

誰でもその方法を教えてもらえますか?

Edit1:「Sort」メソッドが必要だとは思いません...リスト内のアイテムを並べ替えて比較します...リストのアイテムを外部情報と比較し、その結果に基づいてアイテムを並べ替えたい

OrderBy と OrderByDescending は同じアイテムの順序を返しています...

Edit2:私が使用している OrderBy のコードは次のとおりです。aux.OrderBy(f => StringComparisonHelper.HowAlike(f.Name, countyNameSearched));

4

4 に答える 4

1

を使用OrderByして、リストを再割り当てできます。

list = list.OrderBy(f => MyScoreEvaluator("York", f.Name))
于 2013-03-28T15:05:51.377 に答える
1

OrderByを使用できます:

list.OrderBy(f => MyScoreEvaluator("York", f.Name))

または、カスタム Comparer を実装します。

public static int SortByName(County x, County y)
{
    return x.Name.CompareTo(y.Name);
}

使用法:

list.Sort(new Comparison<County>(SortByName))
于 2013-03-28T14:32:18.747 に答える
1

OrderByLINQ には次のようなものがあります。

var sorted = myList.OrderBy(f => MyScoreEvaluator("York", f.Name))

または降順でソートするには:

var sortedDesc = myList.OrderByDescending(f => MyScoreEvaluator("York", f.Name))
于 2013-03-28T14:29:09.703 に答える
-1

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ます。

于 2013-03-28T14:41:53.623 に答える