Dan*_*lba 2 .net c# dictionary list .net-2.0
我有一个只使用a的keyCollection的类,Dictionary<long, object>我想只传递给其他类的键.
我知道字典有一个理论上O(1)的索引访问(作为一个HashTable),但如果我将keyCollection转换为List,访问将更改为O(n).
我怎样才能将keyCollection传递给我的类来维护O(1)访问?
编辑:我正在使用.NET 2.0.
提前致谢.
在评论中,您提到您的意图是.Contains().在这种情况下,您正在寻找的是HashSet<T>,它正是这样 - 它只是保存键(没有值),并提供快速Contains检查.所以; 为了你,Dictionary<long,object>你可以做类似的事情:
var set = new HashSet<long>(dictionary.Keys);
Run Code Online (Sandbox Code Playgroud)
并把它传递过去.为方便起见,HashSet<T>实现ICollection<T>(如果要将其范围限定为接口,而不是具体类型) - 这也有Contains.
实际上,使用它可能更有效(它也适用于.NET 2.0):
ICollection<long> = dictionary.Keys;
Run Code Online (Sandbox Code Playgroud)
通过那个; Contains(key)对此的实现是O(1),因为它是通过以下方式实现的:
bool ICollection<TKey>.Contains(TKey item)
{
return this.dictionary.ContainsKey(item);
}
Run Code Online (Sandbox Code Playgroud)