【发布时间】:2012-03-27 18:17:07
【问题描述】:
我有一个存储许多对象的列表。每个对象都有一个变量形式的属性。
我希望能够检查此列表中的任何项目是否包含特定属性。类似于 Dictionary 的 ContainsKey 方法。这种数据结构要保存非常大量的值,甚至可能是数百万,因此我想使用一种可以尽快检查属性的数据结构。
对于这项工作,字典会是最快的,还是有更快的数据结构?
编辑:
这是我想要实现的一个快速的小例子:
Dictionary<string, Person> persons = new Dictionary<string, Person>(); //where string contains the Person's name
bool isPresent = persons.ContainsKey("Matt");
【问题讨论】:
-
这几百万条记录是从哪里来的?针对数据源的 IEnumerable
来查询 数据是最快的。将数百万条记录加载到内存中是不切实际的。让数据库/NOSQL 通过 LINQ 完成繁重的工作。 -
你提前知道类型和属性吗? IE。您是否正在为“Region”属性测试“Order”对象?或者它是固定名称属性的未知对象?或者它可以使用动态?或者如果成员不固定,也许是 FastMember?要么...?要么...?请添加示例...
-
@tawman:根据记录的大小,将数百万条记录保存在内存中绝对是实用的(并且速度极快)。在之前的工作中,我设法通过将在数据库表中执行查找的代码转换为内存中的代码来极大地提高性能,并进行了调整以减少内存使用量。这一切都取决于上下文。
-
@JonSkeet 非常正确,乔恩和我说的是一般情况,因为我的大脑处于 MVC 模式 ATM 中。通常不会将数百万条记录加载到内存中。但是,我看到您清楚地指出了更广泛的实施范围。附言顺便说一句,享受您的 C# 深度书籍 +1
-
"每个对象都有一个变量形式的属性。" - 那句话不起作用 - 变量是存在于方法中的东西。您不能拥有作为变量的属性。也许发布一些(伪)代码来说明您的实际意思
标签: c# .net data-structures dictionary hashset