2

我有 2 个IEnumerable<KeyValuePair<TreeType, int>>收藏:

  • _myObject.Trees - 包含所有值为 0 的 TreeType。
  • newTrees - 可以包含任意数量的具有任何 int 值的 TreeType。

现在我想做的很简单,但我已经尝试了几个小时,并不能完全得到想要的结果。我想将 newTrees 值插入到 _myobject.Trees 集合中,这样 _myObject.Trees 值就不会全部为 0。

我得到的最接近的是下面。我知道为什么这不起作用,但我还是看不到解决方案。

    foreach (var tree in _myObject.Trees)
    {
        foreach (var newTree in newTrees)
        {
            if (tree.Key == newTree.Key)
            {
                _myObject.Trees[tree] =
                    new KeyValuePair<TreeType, int>(newTree.Key, newTree.Value);
                break;
            }
        }
    }

非常感谢您的帮助,谢谢!

4

2 回答 2

1

您可以尝试以下方法:

foreach (var tree in newTrees)
{
     var keyValuePair = _myObject.Trees.Where(s => s.Key == tree.Key).First();
     keyValuePair = new KeyValuePair<Tree, int>(tree.Key, tree.Value);
}

现在您只循环newTreesWhere(...)找到相应的元素_myObject.Trees而不显式循环。请注意,调用First()假定任何键 innewTrees已经存在于_myObject.Trees并且它只存在一次。

我希望它有帮助!

于 2013-08-06T13:39:47.333 回答
1

尽管 Halvard 方法为主要问题提供了一个很好的解决方案(对他来说 +1),但它并没有明确说明如何将值存储在目标位置。在这里,您有一个更正版的 Halvard 代码,它依赖于最典型的方法:a Dictionary讨论此问题的多个帖子之一):

 Dictionary<TreeType, int> dict = _myObject.Trees.ToDictionary(kvp => kvp.Key, kvp => kvp.Value);
 foreach (var tree in newTrees)
 {
     var keyValuePair = _myObject.Trees.Where(s => s.Key == tree.Key);
     if (keyValuePair.Count() > 0)
     {
         dict[keyValuePair.First().Key] = tree.Value; //Value of the given tree associated with the current Key of _myObject.Trees
     }
 }

_myObject.Trees = dict;
于 2013-08-06T14:21:30.950 回答