使用动态密钥从哈希表中检索值

时间:2014-02-03 18:56:34

标签: c# .net dictionary hashtable

我有一个哈希表“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 _”这样的事情。

这样做的最佳方式是什么?

由于

2 个答案:

答案 0 :(得分:3)

HashTableDictionary<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);