我有2个IEnumerable<KeyValuePair<TreeType, int>>
个集合:
现在我想做的事情很简单,但我已经尝试了几个小时,但却无法获得理想的结果。我想将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;
}
}
}
真的很感谢帮助,谢谢!
答案 0 :(得分: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);
}
现在,您只循环newTrees
,Where(...)
在_myObject.Trees
中找到相应的元素,而不显式循环。请注意,对First()
的调用假定newTrees
中的任何键已经存在于_myObject.Trees
中并且只存在一次。
我希望它有所帮助!
答案 1 :(得分:1)
尽管Halvard方法为主要问题提供了一个很好的解决方案(对他来说是+1),但它没有明确说明如何将值存储在目标位置。在这里,您有一个更正版的Halvard代码依赖于最典型的方法:Dictionary
(one of the multiple posts talking about this):
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;