c# - 在 C# .NET 中用于在 O(1) 时间内获取项目的“正确”集合?

标签 c# .net optimization collections string

如果我正在存储一堆字符串值并且我希望能够在 O(1) 时间后找到它们,我经常做的事情是:

foreach (String value in someStringCollection)
{
    someDictionary.Add(value, String.Empty);
}

这样,以后我就可以轻松地对这些字符串值执行恒定时间查找,例如:

if (someDictionary.containsKey(someKey))
{
    // etc
}

但是,我觉得我通过使值 String.Empty 作弊。我应该使用更合适的 .NET 集合吗?

最佳答案

如果您使用的是 .Net 3.5,请尝试 HashSet .如果您不使用 .Net 3.5,请尝试 C5 .否则,您当前的方法就可以了(@leppie 建议的 bool 更好,或者不像 @JonSkeet 建议的那样,dun dun dun!)。

HashSet<string> stringSet = new HashSet<string>(someStringCollection);

if (stringSet.Contains(someString))
{
    ...
}

关于c# - 在 C# .NET 中用于在 O(1) 时间内获取项目的“正确”集合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/330978/

相关文章:

python - 避免创建新数组作为 numpy/scipy 操作的结果?

jquery - Django查询慢,优化

C# socket重构(数据发送)

c# - XML 反序列化 - 抛出自定义错误

c# - 带有 class 和 new() 关键字的通用方法

c# - Linq 获取所有控件(有序)

.net - 如何确定我的 .NET 程序使用了多少内存?

C# 线性代数库

c# - 如何从组合框 C# 中的选定值获取选定索引

python - 有没有更快的方法来添加两个二维 numpy 数组