具有完全相同键和值的字典

4

我需要类似于字典或排序列表的东西,但当它接收到两个相同的内容时,会抛出异常...有没有其他的解决方法?

谢谢


你可以下载PRISM并使用ListDictionary类。 - SwDevMan81
5个回答

4
我的猜测是你正在使用
dictionary.Add(key, value);

如果你只想简单地替换现有的键值对,那么可以直接使用索引器:

dictionary[key] = value;

如果您想为同一个键拥有多个值,请查看其他答案 :)

抱歉,你刚刚提醒了我最喜欢的Jon Skeet事实:如果你有5美元,而Jon Skeet也有5美元,那么Jon Skeet比你拥有更多的钱。哈哈。 :)... +1 - anon271334
我实际上是用它来存储电子邮件信息的。我使用键来存储发件人的电子邮件,而值则保存电子邮件的主题。 - anon271334
@j-t-s:那么,特定用户有多封电子邮件的实际含义是什么?您需要存储所有主题还是只需存储最新的主题? - Jon Skeet
好的,当我检查电子邮件时,它会从服务器下载所有电子邮件,并将发件人和主题放入字典中。但是我的投资者经常每天发送大量具有完全相同主题的电子邮件。我认为我已经尝试了所有可用的列表类型,但它们似乎都是一样的。我正在查看这些答案中提供的列表,但我希望能找到一些比较简单的东西。 - anon271334

4
你可能需要一个multimap。你可以用一个Dictionary<Key, List<Value>>来模拟它。还可以参见this question,其中有一些multimap实现。

0
在字典或排序列表中,键应该是唯一的:这就是哈希表的目的。你可以使用 List<KeyValuePair<TKey, TValue>>KeyValuePair<TKey, TValue>[] 代替,但是你当然无法通过键定位值,因为你可能有重复的键。

0

字典和排序列表都是有键的,这意味着键必须是唯一的。

您可以在添加项目之前进行检查,例如在添加之前使用dic.ContainsKey(key)list.Contains(item)进行检查。

如果您想要为单个键添加多个值,则可以使用NameValueCollection


0
如果您要求的是一个值与键相同的字典,那么在System.Collections.Generic命名空间中有一种通用集合类型称为“HashSet”,看起来它可以满足这个目的。
如果您只是询问添加到字典时生成的异常,我认为Jon Skeet可能是对您问题的正确解答。
HashSet:

http://msdn.microsoft.com/en-us/library/bb359438.aspx


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接