【问题标题】:How to iterate over a dictionary and add items to its values如何遍历字典并将项目添加到其值
【发布时间】:2020-01-29 10:51:27
【问题描述】:

我有一个字典 Dictionary>,我会遍历它的键,并希望将 SomeKindOfObject 等更多项目的集合添加到值中。 AddRange 不起作用 - 它不会更改该条目的值。 查看我的代码(或多或少):

Dictionary<int, IEnumerable<SomeObject>> myDictionary = setDictionary(); //Assume that this method populate the dictionary.
IEnumerable<int> keys = myDictionary.Keys;
foreach (int key in keys)
{
  myDictionary[key].ToList().AddRange(getListOfSomeObject()); // getListOfSomeObject returns IEnumerable<SomeObject>  
  //Or even
  myDictionary[key].ToList().concat(getListOfSomeObject()); 

}

myDictionary 值保持不变,我想使用 AddRange 方法而不是使用原始值的组合列表和 getListOfSomeObject 方法的输出来设置值

【问题讨论】:

  • ToList 返回一个新列表。修改它不会改变原来的。如果你想更新列表,你首先不应该使用IEnumerable,而应该使用ICollection
  • myDictionary[key] = new IEnumerable based on old

标签: c# linq dictionary linq-to-entities


【解决方案1】:

ToList() 将创建一个新列表。如果修改它,存储在Dictionary 中的列表将不会改变。将新创建的列表再次分配给Dictionary

Dictionary<int, IEnumerable<SomeObject>> myDictionary = setDictionary(); //Assume that this method populate the dictionary.
IEnumerable<int> keys = myDictionary.Keys;
foreach (int key in keys)
{
  var templist = myDictionary[key].ToList();
  templist.AddRange(getListOfSomeObject());
  myDictionary[key] = templist;

}

你能把你的字典类型改成Dictionary&lt;int,List&lt;SomeObject&gt;&gt;吗?然后你可以直接修改它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-21
    相关资源
    最近更新 更多