3

私はc#の問題に取り組んでいます。オブジェクトの配列と 1 つのキー オブジェクトがあります。オブジェクトには 5 つのプロパティがあります。

  1. グループ
  2. サービス
  3. 業界
  4. テクノロジー

キーオブジェクトと最も一致するオブジェクトが最初に表示されるようにオブジェクトを配置したいと思います。そのデータを次の順序で並べたい -

  1. キーオブジェクトのグループと同じグループのオブジェクトを取得します。
  2. 同じグループのオブジェクトが見つかった場合、これらは国に従って並べ替えられます。つまり、同じパラメータ値が見つかった場合、次のパラメータに従って順序が決定されます。
  3. 異なるグループを持つオブジェクトにも同じプロセスが続きます。

1 つの解決策があります。順列ごとに 5 つのパラメーターを組み合わせて 32 個の linq クエリを作成し、それらの 32 個の結果を 1 つずつマージしました。このソリューションは望ましい結果をもたらしますが、このソリューションには多くの処理が必要です。より短い解決策を提供してください。

前もって感謝します。

4

2 に答える 2

4

OrderByDescending+を使用するだけThenByDescendingです:

var orderedObjects = objects
    .OrderByDescending(o => o.Group == keyObj.Group)
    .ThenByDescending(o => o.Country == keyObj.Country)
    .ThenByDescending(o => o.Service == keyObj.Service)
    .ThenByDescending(o => o.Industry == keyObj.Industry)
    .ThenByDescending(o => o.Technology == keyObj.Technology)
    .ThenBy(o => o.Group) // now start ordering by the properties itself
    .ThenBy(o => o.Country)
    .ThenBy(o => o.Service)
    .ThenBy(o => o.Industry)
    .ThenBy(o => o.Technology)
    .ToArray();

比較はtrueorを返しますが、false一方trueは よりも「大きい」falseため、Descending最初に一致するプロパティが必要なためです。

于 2013-07-12T11:38:31.957 に答える
1

重みの異なる各試合にポイントを与えるのはどうですか?

グループマッチは100ポイント、国は1000ポイント、サービスは10000ポイント…

次に、アイテムをスコア順に並べ替えます。

于 2013-07-12T11:40:21.660 に答える