具有多个值的C#字典如何[重复]

Posted

技术标签:

【中文标题】具有多个值的C#字典如何[重复]【英文标题】:C# dictionary with multiple values how to [duplicate] 【发布时间】:2015-11-27 02:17:46 【问题描述】:

我正在努力弄清楚如何修改此字典,以便它可以为一个键(如果需要)接受两个值,而不仅仅是一个值。在大多数情况下,一个键只有一个值,但偶尔会有两个值,应用程序不喜欢这样。相反,它会抛出“已添加相同键的项目”异常。在我仍在学习的过程中,我一直在网上搜索有关字典的信息,但一直在努力,并认为我可能会在这里要求有人为我指明正确的方向。从我读过的内容来看,我应该使用动态或元组,但我在使用下面的代码实现它时遇到了麻烦。我知道这个网站上有类似的问题和答案,但我很难将这些答案与这段代码联系起来。非常感谢一个更具体的例子。

 public List<ImportItem<T>> ProcessReportResult(CSVTable resultData, ICollection<ImportItem<T>> data, Func<T, string> keyFilter)
    
        WriteLog("10 records found.1", resultData.Rows.Length, Environment.NewLine);

        //key = Order Number; value = Order ID
        var idDictionary = resultData.Rows.Select((row => row.Split(','))).ToDictionary(id => id[0], id => id[1]);

        idDictionary.ForEach(id => WriteLog("Input Id = 0 - Matching record Id = 1", id.Key, id.Value));

        var processList = data.Where(item => idDictionary.ContainsKey(keyFilter(item.DataItem))).ToList();

        processList.ForEach(item => item.Id = idDictionary[keyFilter(item.DataItem)]);


        return processList;
    

【问题讨论】:

对值使用某种集合(数组/列表) 您可以使用具有两个属性的类作为字典的值。我认为不要使用元组,因为它是不可变的。 Dictionary 字典 = new Dictionary(); @booksguy,使用.ToLookup 而不是.ToDictionary 感谢 Eser 的建议,您能举例说明一下吗?我现在正在查看 ToLookup,我认为它应该可以工作。只需要弄清楚如何实现它。我还是个n00b 【参考方案1】:

让你的值类型成为一个集合...

Dictionary&lt;string, IEnumerable&lt;string&gt;&gt;.

您必须对这些值做更多的工作,但您可以存储任意数量的唉。如果您想要性能或唯一性,您可以换入 hashset 等集合类型。

要在评论的上下文中使用它:

idDictionary.ForEach(id => WriteLog("Input Id = 0 - Matching record Id = 1", id.Key, string.Concat(id.Value)));

将您的值设为 IEnumerable 字符串,然后使用 string.Concat 将它们拼接在一起。就个人而言,我更喜欢使用完整的符号 Foreach 循环并使用StringBuilder 构建字符串。它更冗长,但可读性强,您可以在值之间添加分隔符以使其可读。

【讨论】:

感谢编辑,ios Safari 浏览了我的代码 sn-p!! 我喜欢这个主意,但你能进一步解释一下吗?我将如何操纵以下行来处理该集合? idDictionary.ForEach(id => WriteLog("Input Id = 0 - 匹配记录Id = 1", id.Key, id.Value));【参考方案2】:

为什么不直接使用 IEnumerable> 而不是 Dictionary?

【讨论】:

以上是关于具有多个值的C#字典如何[重复]的主要内容,如果未能解决你的问题,请参考以下文章

C# - 字典 - 如何在字典中获取特定类值的最大值? [复制]

如何跨多个命名空间C#定义和访问嵌套字典数据[重复]

C#如何创建具有多个相同键的字典? [复制]

从每个键具有多个值的字典中将数据写入 csv

对具有多个大小值的字典进行排序

如何在 Asp.net MVC C# 中使用 Linq 从多个表中选择具有最大计数值的记录