YMC*_*YMC 5 .net c# arrays search
我有一个巨大的内存集(如~100K记录)定义类型的普通CLR对象.此类型具有公共属性int Id {get; 组;}.包含这一大量数据的最佳.NET结构是什么,以便通过其Id提供对任何项目的快速访问?更具体地说,这组数据应该在循环内操作以通过Id查找项目,因此搜索应该尽可能快地完成.搜索可能如下所示:
// Find by id
var entity = entities.First(e => e.Id == id)
Run Code Online (Sandbox Code Playgroud)
基于IEnumerable的结构(如集合和列表)将遍历数据的每个元素,直到找到元素.有什么替代方法?我相信应该有一种方法可以通过Id搜索已排序的数组,就像数据库中的索引搜索一样.
谢谢
测试结果:仅供参考:字典不仅速度快,而且只是无法比拟.我的小测试显示性能从大约3000+ ms(在IEnumerable上调用First())到0(Dictionary上的[index])!
var index = new System.Collections.Generic.Dictionary<int, T>();
Run Code Online (Sandbox Code Playgroud)
T您要访问的对象的类型在哪里.
这是作为哈希表实现的,即.查找项目是通过计算密钥的散列值(通常是非常快速的操作)并使用该散列值作为表的索引来完成的.它可能有点过度简化,但是使用字典,你在字典中存储的条目数几乎无关紧要 - 访问时间应保持近似不变.
要添加条目,请执行 index.Add(entity.Id, entity);
要检查项目是否在集合中,index.ContainsKey(id).
要按ID检索项目,index[id].
| 归档时间: |
|
| 查看次数: |
2997 次 |
| 最近记录: |