【发布时间】:2010-11-18 07:35:49
【问题描述】:
我有一个Dictionary,对于大多数操作,我只需要按键检索单个条目,但对于少数操作,我需要处理与一系列键关联的条目。我想到的方法是使用GetKeys 和FindAll,这将匹配我感兴趣的范围,但想知道是否有人可以提出更好的方法。
【问题讨论】:
标签: c# generics dictionary
我有一个Dictionary,对于大多数操作,我只需要按键检索单个条目,但对于少数操作,我需要处理与一系列键关联的条目。我想到的方法是使用GetKeys 和FindAll,这将匹配我感兴趣的范围,但想知道是否有人可以提出更好的方法。
【问题讨论】:
标签: c# generics dictionary
作为哈希表实现的Dictionary 并不特别适合有效地对键执行范围选择操作。您必须访问所有键才能在指定范围内找到所有键。实现它的一个好方法是使用简单的 LINQ 表达式查询其键集合。
【讨论】:
就像你说的,一个 find all 就可以了。也许是这样的;
dictionary.FindAll(entry => multipleStrings.Contains(entry.Key));
【讨论】:
SortedList 或 SortedDictionary 将对项目进行排序,因此您可以尝试获取范围底部的键,然后将元素遍历到范围的顶部。
在SortedList 上使用二进制搜索将为您提供匹配范围底部或最接近的较高值的键的索引。见How to perform a binary search on IList<T>?
【讨论】: