我正在尋找類似於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]'的結果是什麼?它應該是'國王,熊'還是'國王,玩偶'或'國王,熊,玩偶'? – Jehof
似乎很容易寫你自己的,任何理由爲什麼你正在尋找一個現成的解決方案呢? –
我認爲你正在尋找一個區間樹,請參閱http://stackoverflow.com/questions/303591/a-range-intersection-algorithm-better-than-on – PartlyCloudy