c#多值字典如何实现

本文关键字:实现 何实现 字典 | 更新日期: 2023-09-27 18:10:48

我正在努力弄清楚如何修改这个字典,以便它可以接受一个键的两个值(如果需要)而不是一个值。在大多数情况下,一个键只有一个值,但偶尔也有两个值,应用程序不喜欢这样。相反,它抛出"item with the same key already added"异常。我一直在网上研究字典,因为我还在学习,但一直挣扎,我想我可能会在这里要求有人给我指出正确的方向。从我所读到的,我应该使用动态或元组,但我有困难实现与下面的代码。我知道在这个网站上有类似的问题和答案,但我正在努力将这些答案与这个代码联系起来。一个更具体的例子是非常赞赏的。

 public List<ImportItem<T>> ProcessReportResult(CSVTable resultData, ICollection<ImportItem<T>> data, Func<T, string> keyFilter)
    {
        WriteLog("{1}{0} 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;
    }

c#多值字典如何实现

让你的值类型是一个集合…

Dictionary<string, IEnumerable<string>> .

您必须对值做更多的工作,但是您可以存储任意多的唉。如果需要性能或唯一性,可以交换集合类型,如hashset。

在注释的上下文中使用:

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

让你的值为IEnumerable String,然后使用String。设法把它们都缝在一起。就我个人而言,我更喜欢使用完整的符号Foreach循环,并使用StringBuilder构建字符串。它更冗长,但可读,您可以在值之间添加分隔符以使其可读。

为什么不直接使用IEnumerable<T,T>>而不是字典?