我有一个存储许多对象的列表。每个对象都有一个变量形式的属性。
我希望能够检查此列表中的任何项目是否包含某个属性。类似于Dictionary的ContainsKey方法。这个数据结构要保存非常大量的值,甚至可能是数百万,因此我想使用一种能够尽快检查属性的数据结构。
字典是这项工作最快的,还是有更快的数据结构?
修改
以下是我想要实现的一个简短的小例子:
Dictionary<string, Person> persons = new Dictionary<string, Person>(); //where string contains the Person's name
bool isPresent = persons.ContainsKey("Matt");
答案 0 :(得分:7)
听起来你基本上只需要一个包含所有属性值的HashSet<T>
- 假设你真的只是想知道它是否被包含。
例如:
var allNames = new HashSet<string>(people.Select(person => person.Name));
答案 1 :(得分:0)
这取决于。如果您可以将数据加载到字典中一次然后多次查询,那么字典显然是最快的数据结构。如果多个项目具有相同的属性值,则必须创建Dictionary<TKey,List<TValue>>
或使用LINQ查找。
但是,如果每次查询时都必须加载列表,那么使用字典就没有任何好处。您可以在加载列表时检测正确的属性,或者,如果您正在查询数据库,则尝试使用适当的where子句加载所需的数据。