最快的数据结构,用于检查对象列表中的属性是否匹配

时间:2012-03-10 17:31:12

标签: c# .net data-structures dictionary hashset

我有一个存储许多对象的列表。每个对象都有一个变量形式的属性。

我希望能够检查此列表中的任何项目是否包含某个属性。类似于Dictionary的ContainsKey方法。这个数据结构要保存非常大量的值,甚至可能是数百万,因此我想使用一种能够尽快检查属性的数据结构。

字典是这项工作最快的,还是有更快的数据结构?

修改

以下是我想要实现的一个简短的小例子:

Dictionary<string, Person> persons = new Dictionary<string, Person>(); //where string contains the Person's name

bool isPresent = persons.ContainsKey("Matt");

2 个答案:

答案 0 :(得分:7)

听起来你基本上只需要一个包含所有属性值的HashSet<T> - 假设你真的只是想知道它是否被包含。

例如:

var allNames = new HashSet<string>(people.Select(person => person.Name));

答案 1 :(得分:0)

这取决于。如果您可以将数据加载到字典中一次然后多次查询,那么字典显然是最快的数据结构。如果多个项目具有相同的属性值,则必须创建Dictionary<TKey,List<TValue>>或使用LINQ查找。

但是,如果每次查询时都必须加载列表,那么使用字典就没有任何好处。您可以在加载列表时检测正确的属性,或者,如果您正在查询数据库,则尝试使用适当的where子句加载所需的数据。