.NET基类库中是否存在允许使用重复键的字典类?我找到的唯一解决方案是创建,例如,一个类:
Dictionary<string, List<object>>
但实际上用起来很烦人。在Java中,我相信MultiMap可以实现这一点,但在. net中找不到类似的东西。
.NET基类库中是否存在允许使用重复键的字典类?我找到的唯一解决方案是创建,例如,一个类:
Dictionary<string, List<object>>
但实际上用起来很烦人。在Java中,我相信MultiMap可以实现这一点,但在. net中找不到类似的东西。
当前回答
重复的键将破坏Dictionary的整个契约。在字典中,每个键都是唯一的,并映射到单个值。如果您想要将一个对象链接到任意数量的其他对象,最好的方法可能是类似于DataSet的东西(通常的说法是表)。把键放在一列,值放在另一列。这比字典要慢得多,但这是为了失去散列键对象的能力而付出的代价。
其他回答
你是说完全一致而不是完全重复吗?否则哈希表将无法工作。
同余意味着两个单独的键可以哈希到等价的值,但键不相等。
例如:假设你的哈希表的哈希函数是hashval = key mod 3。1和4都映射到1,但是是不同的值。这就是列表的概念发挥作用的地方。
当需要查找1时,该值被哈希为1,遍历列表,直到找到Key = 1。
如果允许插入重复的键,则无法区分哪些键映射到哪些值。
如果你使用的是。net 3.5,使用Lookup类。
编辑:通常使用Enumerable.ToLookup创建Lookup。这确实假设你不需要更改它之后-但我通常发现这已经足够好了。
如果这对你不起作用,我不认为框架中有任何东西可以帮助-使用字典是最好的:(
这也是可能的:
Dictionary<string, string[]> previousAnswers = null;
这样,我们就有了唯一的键。希望这对你有用。
当使用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 }
你可以定义一个方法来构建复合字符串键 在任何你想要使用字典的地方,你都必须使用这个方法来构建你的键 例如:
private string keyBuilder(int key1, int key2)
{
return string.Format("{0}/{1}", key1, key2);
}
使用:
myDict.ContainsKey(keyBuilder(key1, key2))