【发布时间】:2015-11-27 02:17:46
【问题描述】:
我正在努力弄清楚如何修改此字典,以便它可以为一个键(如果需要)接受两个值,而不仅仅是一个值。在大多数情况下,一个键只有一个值,但偶尔会有两个值,应用程序不喜欢这样。相反,它会抛出“已添加相同键的项目”异常。在我仍在学习的过程中,我一直在网上搜索有关字典的信息,但一直在努力,并认为我可能会在这里要求有人为我指明正确的方向。从我读过的内容来看,我应该使用动态或元组,但我在使用下面的代码实现它时遇到了麻烦。我知道这个网站上有类似的问题和答案,但我很难将这些答案与这段代码联系起来。非常感谢一个更具体的例子。
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;
}
【问题讨论】:
-
对值使用某种集合(数组/列表)
-
您可以使用具有两个属性的类作为字典的值。我认为不要使用元组,因为它是不可变的。 Dictionary
字典 = new Dictionary (); -
@booksguy,使用
.ToLookup而不是.ToDictionary -
感谢 Eser 的建议,您能举例说明一下吗?我现在正在查看 ToLookup,我认为它应该可以工作。只需要弄清楚如何实现它。我还是个n00b
标签: c# dictionary