我有一个内存对象列表(大约50000-100万),它们有6-7个属性(attributes)。
要求是过滤这个具有多个属性的内存中列表。线性搜索允许我在列表上执行O(N)搜索。有没有比泛型列表更好的数据结构更快的方法呢?
我使用的是C#.NET 4.0。
发布于 2013-02-01 17:47:27
我最好的建议是:
为每个必需的属性创建字典(将搜索分开,逐个查找每个必需的字典,然后选择list of minimal dictionaries)
如果属性值没有大量重复,这种方法将非常有用。但是,如果每个属性都有很多重复项,这种方法将非常糟糕。
Possible improvement:每个列表到字典中可能排序,之后按属性之一进行二进制搜索。
发布于 2013-10-14 01:35:01
你可以使用一个名为IndexedList的助手库,你可以使用这个库从http://indexedlist.codeplex.com/下载它,你可以在你对象的任何字段上添加索引,然后在你的列表中执行快速搜索。默认索引实现使用Dictionary来存储索引数据,您也可以更改它。我为自己的项目创建了这个库,然后将其作为新的开源项目发布。我将很高兴听到你对这个库的反馈。
发布于 2013-02-01 17:27:39
就在几秒钟前,我读到了这个:http://blog.bodurov.com/Performance-SortedList-SortedDictionary-Dictionary-Hashtable/
就搜索而言,SortedDictionary
似乎是您最好的选择,但是由于您希望按多个属性进行搜索,因此如果您希望在搜索和插入大量数据之间取得良好的平衡,那么SortedList
可能会以内存使用为代价产生更好的结果。
https://stackoverflow.com/questions/14643146
复制相似问题