ric*_*ard 8 .net dictionary generic-collections
我想使用类似的泛型集合Dictionary
,但Dictionary
要求每个键都是唯一的.我有相同"密钥"的多个值,所以我需要一个允许的通用集合.
我意识到这使得钥匙不再是钥匙,但我不知道还有什么可以称之为钥匙.
Ond*_*cny 18
您可以考虑几个选项:
Dictionary<TKey, List<TValue>>
- 保留每个键的值列表,而不是阻止相同键的重复值(即重复对);Dictionary<TKey, HashSet<TValue>>
- 为每个键保留一组值,防止同一个键的重复值 ;List<KeyValuePair<TKey, TValue>>
- 保留对列表,不要阻止同一个键的重复值.注意,在后一种情况下KeyValuePair
是a struct
,而不是a class
,因此意味着有点不同的处理.
正确的选项取决于您的实际用例.
在.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)