我有一个内存对象列表(大约5亿到1亿),它有6-7个属性(属性)。
要求是使用多个属性过滤此内存列表。线性搜索允许我在列表上进行O(N)搜索。使用比通用列表更好的数据结构有没有更快的方法呢?
我正在使用C#.NET 4.0。
答案 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)
我最好建议:
如果属性值没有大量重复,这种方法将非常有用。 但是如果每个属性都有很多重复,那么这种方法将非常糟糕。
可能的改进:每个列表都可以排序到字典中,并在使用后通过其中一个属性进行二进制搜索。