我有两个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;
}
}
}非常感谢你的帮助,谢谢!
发布于 2013-08-06 13:39:47
你能试一下以下几种方法吗?
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中,并且只存在一次。
希望能帮上忙!
发布于 2013-08-06 14:21:30
尽管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;https://stackoverflow.com/questions/18079510
复制相似问题