首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在字典中搜索值

如何在字典中搜索值
EN

Stack Overflow用户
提问于 2010-06-09 03:48:56
回答 6查看 324关注 0票数 1

在字典中搜索值的最佳方式是什么?例如,我想搜索修改过的对象,遍历整个集合是唯一的方法吗?

c#、.net 2.0

代码语言:javascript
运行
复制
class RecA
 { 
 public bool modified {get;set:}
 public string txt {get;set;}
 }

class RecA_Dic : Dictionary<int,Rec_A>
{

   public bool GetItemByKey(int key,out obj)
   {
    return   this.TryGetValue(key, out obj);
    }

   public List<Rec_A> getModifiedItems()
   {
     List<Rec_A> li = new List<Rec_A>();
     for(int i=0;i<this.count;i++)
      if (((Rec_A)this[i]).modified == true)
       li.Add((Rec_A)this[i]);
     return li;
   }

}
EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-06-09 03:53:29

考虑到这些约束(.NET 2.0),您几乎达到了目标。IEnumerable<Rec_A>加上yield return是一个更好的选择,国际海事组织:

代码语言:javascript
运行
复制
public IEnumerable<Rec_A> getModifiedItems()
{
  foreach (Rec_A rec in this.Values)
  {
     if (rec.modified)
        yield return rec;
  }
}
票数 7
EN

Stack Overflow用户

发布于 2010-06-09 03:52:51

是的,字典只有一个键的快速查找。如果要在值中查找任何内容,则必须遍历整个集合。

如果你经常这样做,你可以在你的集合中放一个列表,只跟踪修改过的项目。当修改集合时会有更多的开销,因为列表也必须更新,但只获取修改后的项将非常快。

票数 2
EN

Stack Overflow用户

发布于 2010-06-09 03:53:41

搜索整个字典肯定是最简单的方法,尽管foreach循环会更干净:

代码语言:javascript
运行
复制
foreach (KeyValuePair<int, Rec_A> kvp in d)
{
    // Check kvp.Value
}

如果您希望查找速度更快,可以在修改对象时将其添加到单独的列表中。这会减慢修改的速度,所以这里涉及到一个权衡。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3000727

复制
相关文章

相似问题

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