首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >设置IEnumerable KeyValuePair

设置IEnumerable KeyValuePair
EN

Stack Overflow用户
提问于 2013-08-06 11:55:59
回答 2查看 947关注 0票数 2

我有两个IEnumerable<KeyValuePair<TreeType, int>>集合:

  • _myObject.Trees -包含值为0的所有TreeTypes。
  • newTrees -可以包含任意整数值的任意数量的TreeTypes。

现在,我想做的事情很简单,但我已经尝试了几个小时,但无法完全达到预期的结果。我希望将newTrees值插入到_myobject.Trees集合中,这样_myObject.Trees值就不会全部为0。

离我最近的是下面。我知道为什么这行不通,但我还是看不出解决办法。

代码语言:javascript
复制
    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;
            }
        }
    }

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-08-06 13:39:47

你能试一下以下几种方法吗?

代码语言:javascript
复制
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()的调用假定newTrees中的任何键都已存在于_myObject.Trees中,并且只存在一次。

希望能帮上忙!

票数 1
EN

Stack Overflow用户

发布于 2013-08-06 14:21:30

尽管Halvard方法为主要问题提供了一个很好的解决方案(对于他来说是+1),但它没有明确说明如何在目标位置存储值。这里有一个经过修正的Halvard代码版本,它依赖于最典型的方法:Dictionary (one of the multiple posts talking about this):

代码语言:javascript
复制
 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;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18079510

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档