.NET基类库中是否存在允许使用重复键的字典类?我找到的唯一解决方案是创建,例如,一个类:
Dictionary<string, List<object>>
但实际上用起来很烦人。在Java中,我相信MultiMap可以实现这一点,但在. net中找不到类似的东西。
.NET基类库中是否存在允许使用重复键的字典类?我找到的唯一解决方案是创建,例如,一个类:
Dictionary<string, List<object>>
但实际上用起来很烦人。在Java中,我相信MultiMap可以实现这一点,但在. net中找不到类似的东西。
当前回答
NameValueCollection支持一个键(也是字符串)下的多个字符串值,但这是我所知道的唯一一个例子。
当我遇到需要这种功能的情况时,我倾向于创建类似于您示例中的结构。
其他回答
我认为List<KeyValuePair<object object>>可以完成任务。
重复的键将破坏Dictionary的整个契约。在字典中,每个键都是唯一的,并映射到单个值。如果您想要将一个对象链接到任意数量的其他对象,最好的方法可能是类似于DataSet的东西(通常的说法是表)。把键放在一列,值放在另一列。这比字典要慢得多,但这是为了失去散列键对象的能力而付出的代价。
由于新的c#(我相信它是从7.0开始的),你也可以做这样的事情:
var duplicatedDictionaryExample = new List<(string Key, string Value)> { ("", "") ... }
你使用它作为一个标准的列表,但有两个值命名为任何你想
foreach(var entry in duplicatedDictionaryExample)
{
// do something with the values
entry.Key;
entry.Value;
}
当使用List<KeyValuePair<string, object>>选项时,你可以使用LINQ来进行搜索:
List<KeyValuePair<string, object>> myList = new List<KeyValuePair<string, object>>();
//fill it here
var q = from a in myList Where a.Key.Equals("somevalue") Select a.Value
if(q.Count() > 0){ //you've got your value }
你是说完全一致而不是完全重复吗?否则哈希表将无法工作。
同余意味着两个单独的键可以哈希到等价的值,但键不相等。
例如:假设你的哈希表的哈希函数是hashval = key mod 3。1和4都映射到1,但是是不同的值。这就是列表的概念发挥作用的地方。
当需要查找1时,该值被哈希为1,遍历列表,直到找到Key = 1。
如果允许插入重复的键,则无法区分哪些键映射到哪些值。