是否有基于两个维度范围的快速检索操作的高效.NET集合?

时间:2015-10-06 14:27:28

标签: c# .net winforms search canvas

我正在寻找一个快速高效的.NET集合(如果有的话)。我的目的是执行基于快速范围的检索操作,但在插入和删除方面仍然没有那么慢(我知道这通常是关于检索效率和对集合的修改的权衡)。简而言之,让我们说检索操作效率仍然比修改操作效率要高一些。

背景是我正在使用winforms设计一个Canvas,简单地说我只是在其上“绘画”形状:

enter image description here

为了使方法更简单,让我们考虑一下无论形状如何或看起来如何,我们只是考虑使用客户端矩形定义它周围的边界框。

无论如何,现在说我点击我的Control上的一个项目(因此显示在Canvas视图中),它显示潜在的(相应于ZoomValue)只有Canvas中包含的所有项目的部分集合,如何快点知道哪个项目被点击了?

每个项目都有自己的BoundingBox属性(因此X,Y,Width& Height)和Z顺序。 但是在这里它们不同我们基本上将鼠标的坐标转换为Canvas View坐标(相应于缩放因子),并且基于它我想知道如何避免在View Items中进行完整而冗长的搜索(顺便说一下问题还涉及在View发生变化时重新分配项目。

如果是100件物品现在仍然很好我现在正在考虑屏幕上有数千个箭头的情况(这个数字比窗口控制器控件的数量大得多,这就是为什么我我正在设计自己的帆布。)

我看了一些SPT策略,包括OmniTree数据结构,它可能是最适合我的情况的数据结构但是,我对这些修改有点怀疑而不是很慢:{{3 }}

任何人都会有同样的要求吗?

2 个答案:

答案 0 :(得分:1)

不,没有内置集合允许按范围/边界矩形搜索。您需要编写自己的/找到适合您需要的库。

没有通用算法适用于通过范围数据处理搜索的大量应用程序。多维度也无济于事。

您可能想查看游戏中使用的算法:

  • Binary space partitioning
  • Bin - 空间的常规/不规则散列 - 每个矩形将映射到一个或多个单元格
  • 您的分组可能是搜索的自然解决方案 - 查找根的矩形,从而限制下一级搜索。

答案 1 :(得分:0)

您应该为此目的使用数据表,数据表允许您快速查找,删除插入和更新。