我有一个只使用Dictionary<long, object>
的keyCollection的类,我想只传递给其他类的键。
我知道字典有一个理论O(1)
索引访问(作为HashTable
),但是如果我将keyCollection转换为List,访问权限将更改为O(n)
如何将keyCollection传递给我的类,同时保持O(1)
访问权限?
编辑:我正在使用.NET 2.0。
提前致谢。
答案 0 :(得分:6)
在评论中,您提到您的意图是.Contains()
。在这种情况下,您正在寻找的是HashSet<T>
,它正是这样 - 它只保存键(没有值),并提供快速Contains
检查。所以;对于您的Dictionary<long,object>
,您可以执行以下操作:
var set = new HashSet<long>(dictionary.Keys);
并将其传递过来。为方便起见,HashSet<T>
实现ICollection<T>
(如果要将其范围限定为接口,而不是具体类型) - 它也有Contains
。
实际上,使用它可能更有效(它也适用于.NET 2.0):
ICollection<long> = dictionary.Keys;
并通过; Contains(key)
对此的实现是O(1),因为它是通过以下方式实现的:
bool ICollection<TKey>.Contains(TKey item)
{
return this.dictionary.ContainsKey(item);
}