私はリストのリストを持っています。各内部リストは次のような整数のリストです(コードはわかりやすくするために簡略化されています)。
var listOfLists = new List<List<int>>
{
new List<int> {6, 0, 2, 5, 6}, // #3 in sort order
new List<int> {6, 0, 2, 2, 5, 6}, // #2 in sort order
new List<int> {0, -1, 0, 0, 7}, // #1 in sort order
new List<int> {11, 3, 5, 5, 12}, // #4 in sort order
};
次のルールに従って、LINQ-to-Objectsを使用してこれらのリストを並べ替えたいと思います。
- いずれかのリストが空の場合、空でないリストが最初にソートされます
- 最小数が最も少ないリストが最初にソートされます
- 同点の場合、最小の重複の最大数が最初にソートされます。例:の
{2,2}
前に並べ替え{2}
ます。 - それでも同点の場合は、両方のリストから最小値を削除して、ステップ1に進みます。
バックグラウンド:
各リストは、それぞれ1つ以上の小売店がある場所を表しています。各小売店には、その場所の補充がどれほどひどく必要かを定義する「緊急」番号が割り当てられています。「最悪」は-1です。これは通常、顧客が空の製品について不満を言っていることを意味します。0は通常、ストアで売れ筋商品が不足していることを意味します。1は通常、ほとんど空の店舗です。等々。実際には、緊急度の計算は複雑で、データマイニングによって検証された複数の基準に基づいていますが、数値を取得する方法は並べ替えにとって重要ではありません。
最も緊急性の高い場所を見つけたいと思います。これは、最も緊急性の高い店舗がある場所として定義し、その緊急度のレベルの店舗の数をタイブレーカーとして使用します。