重複の可能性:
重複キーを許可する C# のソート可能なコレクション
基本的に、カスタム比較器の実装に入ることなく、辞書を重複キーで機能させたいと思います。次の考え方があります。
Dictionary<key, List<value>>
ただし、まだオーバーヘッドがあります。辞書に「AllowDuplicates」があればいいのにと思います。
重複の可能性:
重複キーを許可する C# のソート可能なコレクション
基本的に、カスタム比較器の実装に入ることなく、辞書を重複キーで機能させたいと思います。次の考え方があります。
Dictionary<key, List<value>>
ただし、まだオーバーヘッドがあります。辞書に「AllowDuplicates」があればいいのにと思います。
.NET 3.5 を使用している場合は、おそらくLookupを使用することをお勧めします。
.NET 2.0: PowerCollectionsには、OrderedMultiDictionary
.
引き続き SortedList を使用して、値と Guid をクラスに組み合わせることで一意のキーを作成することができます。この場合、次のIComparer<NewKey>
ような新しいキーの を実装する必要があります。
class MyKey
{
public Guid Guid { get; set; }
public float Value { get; set; }
}
class MyComparer : IComparer<MyKey>
{
public int Compare(MyKey x, MyKey y)
{
if (x == null || y == null)
throw new InvalidOperationException("both of parameters must be not null");
if (x.Value < y.Value) return -1;
if (x.Value > y.Value) return 1;
return 0;
}
}
その後
var mySortedList = new SortedList<MyKey, MyValue>(new MyComparer());
Fx < 3.5 にはありません。明らかに、IList オブジェクトの Dictionary を使用して実装できます。しかし、カプセル化の問題/責任があります。
.NET 3.5 を使用している場合は、Lookupクラスを使用します。
それはうまくいきません。比較子から 0 を返すとすぐに、「重複」例外がスローされます。
クラスのカプセル化などは必要ありません。0 (等しい) の結果を返さない比較子を作成するだけです。int
これはキーのタイプの例です
class MyComparer : IComparer<int>
{
public int Compare(int x, int y)
{
if (x < y)
return -1;
else return 1;
}
}
同じ問題に遭遇しました..重複キーを許可できるsortedListが必要でした..
var sortList = new SortedList<string, IDictionary<string, object>>();
しかし、これは機能しませんでした..だから私は使用しました
var list = new List<KeyValuePair<string, IDictionary<string, object>>>();
新しいデータを .. として追加します。
list.Add(new KeyValuePair<string, IDictionary<string, object>>>(value, Dictionary));
linqで問題なくソートできました..
試すList<KeyValuePair<TKey, List<TValue>>>();
定義により、Dictionary には一意のキーが含まれます。上記の例は、事実上、私が何度も使用した構造である、一種の 2 次元のキー付き配列です。なぜ重複したキーが必要なのですか? もしそうなら、ディクショナリはそのメンバーをどのように一意にアドレス指定しますか?