我有一个哈希表“Param”,其中包含动态创建的键。
例如
key:chkbox_1价值:1
key:chk_box_2价值:2
key:chk_box_3值
等等。
现在我想得到像LIK“chkbox_”这样的键的所有值 我不能做Param.ContainsKey [“chkbox_”+ id],因为我不知道“id”部分。
所以基本上我想做像Param.ContainsKey LIKE“chkbox _”这样的事情。
这样做的最佳方式是什么?
由于
答案 0 :(得分:3)
HashTable
和Dictionary<TKey, TValue>
都要求您知道执行快速 O(1)查找值的关键。如果您不知道密钥,则必须遍历整个集合并检查所有密钥以找到您要查找的内容。
您应该考虑将您的收藏集改为例如SortedList
,允许您在 O(log n)时间内找到带有LIKE 'Prefix%'
谓词的项目,而不是 O(n)用于标准线性搜索范围。
答案 1 :(得分:1)
你必须遍历所有对:
var values = dict.Where(kvp => kvp.Key.StartsWith("chkbox_"))
.Select(kvp => kvp.Value);
如果您使用的是非通用HashTable
,则必须投射:
IEnumerable<object> values = dict.Cast<DictionaryEntry>()
.Where(de => ((string)de.Key).StartsWith("chkbox_"))
.Select(de => de.Value);