在字典中搜索值的最佳方式是什么?例如,我想搜索修改过的对象,遍历整个集合是唯一的方法吗?
c#、.net 2.0
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;
}
}发布于 2010-06-09 03:53:29
考虑到这些约束(.NET 2.0),您几乎达到了目标。IEnumerable<Rec_A>加上yield return是一个更好的选择,国际海事组织:
public IEnumerable<Rec_A> getModifiedItems()
{
foreach (Rec_A rec in this.Values)
{
if (rec.modified)
yield return rec;
}
}发布于 2010-06-09 03:52:51
是的,字典只有一个键的快速查找。如果要在值中查找任何内容,则必须遍历整个集合。
如果你经常这样做,你可以在你的集合中放一个列表,只跟踪修改过的项目。当修改集合时会有更多的开销,因为列表也必须更新,但只获取修改后的项将非常快。
发布于 2010-06-09 03:53:41
搜索整个字典肯定是最简单的方法,尽管foreach循环会更干净:
foreach (KeyValuePair<int, Rec_A> kvp in d)
{
// Check kvp.Value
}如果您希望查找速度更快,可以在修改对象时将其添加到单独的列表中。这会减慢修改的速度,所以这里涉及到一个权衡。
https://stackoverflow.com/questions/3000727
复制相似问题