是否存在具有键/值对的通用集合,其中键可以多次出现?

ric*_*ard 8 .net dictionary generic-collections

我想使用类似的泛型集合Dictionary,但Dictionary要求每个键都是唯一的.我有相同"密钥"的多个值,所以我需要一个允许的通用集合.

我意识到这使得钥匙不再是钥匙,但我不知道还有什么可以称之为钥匙.

Ond*_*cny 18

您可以考虑几个选项:

  • 使用a Dictionary<TKey, List<TValue>>- 保留每个键的值列表,而不是阻止相同键的重复值(即重复对);
  • 使用a Dictionary<TKey, HashSet<TValue>>- 为每个键保留一值,防止同一个键的重复值 ;
  • 使用a List<KeyValuePair<TKey, TValue>>- 保留对列表,不要阻止同一个键的重复值.

注意,在后一种情况下KeyValuePair是a struct,而不是a class,因此意味着有点不同的处理.

正确的选项取决于您的实际用例.


Mar*_*ell 8

在.NET 3.5及更高版本中,即ILookup<TKey,TValue>.不幸的是,唯一提供的实现是不可变的Lookup<TKey,TValue>,但是很容易重新实现.An EditableLookup<TKey,TValue>包含在MiscUtil中.

使用a ILookup<TKey,TValue>,TKey索引器返回一个IEnumerable<TValue>(即使该键没有匹配项),所以典型的用法是:

foreach(var value in lookup[key])
    DoSomethingWith(value);
Run Code Online (Sandbox Code Playgroud)