【问题标题】:Dictionary with Exact Same Keys and Values具有完全相同的键和值的字典
【发布时间】:2011-02-22 18:34:19
【问题描述】:

我需要一个 Dictionary 或 SortedList 之类的东西,但是当它收到两个相同的东西时,我不断抛出异常......还有其他方法吗?

谢谢

【问题讨论】:

  • 您可以下载 PRISM 并使用 ListDictionay 类。

标签: c# .net winforms list dictionary


【解决方案1】:

我猜你正在使用

dictionary.Add(key, value);

如果您对替换现有的键/值对感到满意,那么只需使用索引器:

dictionary[key] = value;

如果您想为同一个键设置多个值,请参阅其他答案 :)

【讨论】:

  • 对不起,你刚刚让我想起了我最喜欢的 Jon Skeet 事实:如果你有 5 美元,而 Jon Skeet 有 5 美元,那么 Jon Skeet 比你有钱。哈哈。 :)... +1
  • 我实际上是在使用它来存储有关电子邮件的信息。我正在使用 Key 来存储发件人的电子邮件,并且值是保存电子邮件的主题
  • @j-t-s:那么来自特定用户的不止一封电子邮件的实际含义是什么?您需要存储所有主题,还是只存储最新的主题?
  • 好吧,当我检查电子邮件时,它会从服务器下载所有电子邮件并将发件人和主题放入字典中。但很多时候,我的投资者每天都会发送大量相同主题的电子邮件。我想我已经尝试了所有可用的列表类型,但它们似乎都是一样的。我正在查看这些答案中提供的内容,但我有点希望有点简单
【解决方案2】:

您可能想要multimap。您可以使用Dictionary<Key, List<Value>> 模拟一个。另见this question,它有一些多地图实现。

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

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

      如果您希望能够为单个键添加多个值,可以使用NameValueCollection

      【讨论】:

        【解决方案5】:

        如果您要的是一个值与键相同的字典,那么在 System.Collections.Generic 命名空间中有一个名为“HashSet”的通用集合类型,看起来它可以用于此目的。

        如果您只是询问添加到字典时产生的异常,我认为 Jon Skeet 可能是正确的,可能是您的问题。

        哈希集:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-04-27
          • 2015-08-19
          • 1970-01-01
          • 1970-01-01
          • 2019-08-18
          • 1970-01-01
          相关资源
          最近更新 更多