Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 具有多个值的C字典如何_C#_Dictionary - Fatal编程技术网

C# 具有多个值的C字典如何

C# 具有多个值的C字典如何,c#,dictionary,C#,Dictionary,我正在努力弄清楚如何修改这个字典,以便它可以在需要时为一个键接受两个值,而不仅仅是一个值。在大多数情况下,一个键只有一个值,但偶尔有两个值,应用程序不喜欢这样。相反,它抛出的项与已添加的键相同。我一直在网上研究字典,因为我还在学习,但一直在努力,我想我可能会在这里请人给我指出正确的方向。从我所读到的内容来看,我应该使用动态或元组,但我在用下面的代码实现这一点时遇到了困难。我知道在这个网站上也有类似的问题和答案,但我很难将这些答案与这个代码联系起来。请举一个更具体的例子 public List&

我正在努力弄清楚如何修改这个字典,以便它可以在需要时为一个键接受两个值,而不仅仅是一个值。在大多数情况下,一个键只有一个值,但偶尔有两个值,应用程序不喜欢这样。相反,它抛出的项与已添加的键相同。我一直在网上研究字典,因为我还在学习,但一直在努力,我想我可能会在这里请人给我指出正确的方向。从我所读到的内容来看,我应该使用动态或元组,但我在用下面的代码实现这一点时遇到了困难。我知道在这个网站上也有类似的问题和答案,但我很难将这些答案与这个代码联系起来。请举一个更具体的例子

 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;
    }

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

将您的值类型设置为集合

字典

您必须对这些值做更多的工作,但您可以存储任意数量的值。如果需要性能或唯一性,可以在集合类型(如hashset)中进行交换

要在您的评论中使用此选项,请执行以下操作:

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

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

对值使用某种collectionarray/list您可以使用具有两个属性的类作为字典的值。在我看来,不要使用元组,因为它是不可变的。字典=新字典@booksguy,使用.ToLookup而不是.ToDictionarythanks作为建议Eser,你能用一个例子详细说明吗?我现在正在看ToLookup,我认为它应该会起作用。只要想办法实现它就行了。我仍然只是一个N00B编辑高手,iOS Safari已经把我的代码片段搞糟了!!我喜欢这个主意,但你能进一步解释一下吗。如何操作下面的行来处理集合?idDictionary.ForEachid=>WriteLogInput Id={0}-匹配记录Id={1},Id.Key,Id.Value;