我正在寻找一个快速高效的.NET集合(如果有的话)。我的目的是执行基于快速范围的检索操作,但在插入和删除方面仍然没有那么慢(我知道这通常是关于检索效率和对集合的修改的权衡)。简而言之,让我们说检索操作效率仍然比修改操作效率要高一些。
背景是我正在使用winforms设计一个Canvas,简单地说我只是在其上“绘画”形状:
为了使方法更简单,让我们考虑一下无论形状如何或看起来如何,我们只是考虑使用客户端矩形定义它周围的边界框。
无论如何,现在说我点击我的Control上的一个项目(因此显示在Canvas视图中),它显示潜在的(相应于ZoomValue)只有Canvas中包含的所有项目的部分集合,如何快点知道哪个项目被点击了?
每个项目都有自己的BoundingBox属性(因此X,Y,Width& Height)和Z顺序。 但是在这里它们不同我们基本上将鼠标的坐标转换为Canvas View坐标(相应于缩放因子),并且基于它我想知道如何避免在View Items中进行完整而冗长的搜索(顺便说一下问题还涉及在View发生变化时重新分配项目。
如果是100件物品现在仍然很好我现在正在考虑屏幕上有数千个箭头的情况(这个数字比窗口控制器控件的数量大得多,这就是为什么我我正在设计自己的帆布。)
我看了一些SPT策略,包括OmniTree数据结构,它可能是最适合我的情况的数据结构但是,我对这些修改有点怀疑而不是很慢:{{3 }}
任何人都会有同样的要求吗?
答案 0 :(得分:1)
不,没有内置集合允许按范围/边界矩形搜索。您需要编写自己的/找到适合您需要的库。
没有通用算法适用于通过范围数据处理搜索的大量应用程序。多维度也无济于事。
您可能想查看游戏中使用的算法:
答案 1 :(得分:0)
您应该为此目的使用数据表,数据表允许您快速查找,删除插入和更新。