快速内存中搜索多个属性

时间:2013-02-01 09:25:50

标签: c# search data-structures

我有一个内存对象列表(大约5亿到1亿),它有6-7个属性(属性)。

要求是使用多个属性过滤此内存列表。线性搜索允许我在列表上进行O(N)搜索。使用比通用列表更好的数据结构有没有更快的方法呢?

我正在使用C#.NET 4.0。

3 个答案:

答案 0 :(得分:1)

您可以使用名为IndexedList的帮助程序库, 你可以从http://indexedlist.codeplex.com/下载它 使用此库,您可以在对象的任何字段上添加索引,然后在列表中执行快速搜索。 默认索引实现使用Dictionary来存储索引数据,您也可以更改它。 我为自己的项目创建了这个库,然后我将其作为一个新的开源项目发布。 我很乐意听到您对该图书馆的反馈意见。

答案 1 :(得分:0)

就在几秒钟前,我读到了这个:http://blog.bodurov.com/Performance-SortedList-SortedDictionary-Dictionary-Hashtable/

似乎SortedDictionary可能是您搜索的最佳选择,但由于您希望通过多个属性进行搜索,因此如果您希望在搜索和插入大量数据之间取得良好平衡,那么SortedList可能是{{1}} 1}}将以内存使用为代价产生更好的结果。

答案 2 :(得分:0)

我最好建议:

  1. 为每个必需属性(单独的词典)创建词典
  2. 搜索时,逐个单独查找每个必需的字典 选择最小尺寸列表
  3. 迭代最小尺寸列表
  4. 如果属性值没有大量重复,这种方法将非常有用。 但是如果每个属性都有很多重复,那么这种方法将非常糟糕。

    可能的改进:每个列表都可以排序到字典中,并在使用后通过其中一个属性进行二进制搜索。