【发布时间】:2017-01-02 09:05:03
【问题描述】:
我正在寻找类似于 SCG.Dictionary 但将数字范围作为键的数据结构。
对性能要求最高的主要操作是查找与指定范围重叠的键。
例如,假设如下图
[ 5, 15] -> King
[35, 50] -> Bear
[25, 40] -> Doll
当 [10, 30] 被传递给搜索算法时,它必须回复以下条目:
[ 5, 15] -> King
[25, 40] -> Doll
理想的搜索方法应该返回 IEnumerable 而不是将结果复制到中间容器中。类似于SortedSet.GetViewBetween
使用模式类似于
var lookup = new RangeDictionary<int>();
lookup.Add( 5, 15, 'King' );
lookup.Add( 35, 50, 'Bear' );
lookup.Add( 25, 40, 'Doll' );
var results = lookup.FindIntersection( 10, 30 );
foreach( var pair in results )
Console.WriteLine( "[{0}, {1}] -> {2}", pair.Key.From, pair.Key.To, pair.Value );
有现成的解决方案吗?
【问题讨论】:
-
你的例子正确吗?
[10,35]的结果是什么?应该是King, Bear还是King, Doll还是King, Bear, Doll? -
自己编写似乎很容易,您为什么要为此寻找现成的解决方案?
-
我认为你在寻找区间树,见stackoverflow.com/questions/303591/…
标签: c#