.Net:用于存储返回给定值的匹配范围的数值范围的集合

时间:2014-12-31 10:54:11

标签: .net collections

我正在为这些要求搜索集合的有效实现:

  • 可以存储数值范围对象(从/到)
  • 可以返回包含特定值的集合的所有范围

实施例: 假设集合包含以下范围对象: 项目1:5至10 第2:7至9项 项目3:3至6

然后,采取' 8'作为参数,集合应返回第1项和第2项 范围可以重叠。返回的范围对象不需要按任何特定顺序。 开始和结束值仅受UInt32类型的值范围限制(与上面的简单示例相反)。

是否可以使用一个流行的集合库来实现它,比如C5?

实现应该是高效的,需要迭代大量集合元素的实现是微不足道的,这就是我已经拥有的。

2 个答案:

答案 0 :(得分:0)

你可以用不同的方式解决它,一个不错的方法。

如果范围列表不是太大。您可以专注于构建List<List<T>>List<T>[],同时使用范围ID,即8作为索引或键,用于返回包含此索引的项目。

  • 对于动态大小,我会使用List<List<T>>,其中T代表Item的对象类型。
  • 对于修复大小,数组将是更好的选择。

阵列

索引 - 值

0 -
1 - 
2 - 
3 - Item 3
4 - Item 3
5 - Item 1, Item 3
6 - Item 1, Item 3
7 - Item 1, Item 2
8 - Item 1, Item 2
9 - Item 1, Item 2
10 - Item 1

在此方法中,您可以通过 O(1)访问包含请求范围的项目myArray[index]将返回项目列表。

复杂度:

  • 构建 O(Count(Items)* Max(Item.Length))
  • 检索将是 O(1)

答案 1 :(得分:0)

您正在寻找名为间隔树的数据结构。像这样的.NET有几种实现:

https://github.com/mbuchetics/RangeTree

或者这个

https://github.com/vvondra/Interval-Tree