Ich bin auf der Suche nach Datenstruktur ähnlich wie SCG.Dictionary aber mit Nummernbereichen als Schlüssel.Suggest Datenstruktur geeignet für Key Range Lookup
Hauptoperation, bei der die meiste Leistung erforderlich ist, wäre die Suche nach Schlüsseln, die sich mit dem angegebenen Bereich überschneiden.
Zum Beispiel unter der Annahme, die folgende Karte
[ 5, 15] -> King
[35, 50] -> Bear
[25, 40] -> Doll
, wenn [10, 30] übergeben wird Algorithmus zur Suche mit den folgenden Einträgen antworten müssen:
[ 5, 15] -> King
[25, 40] -> Doll
Idealersuchmethode sollte IEnumerable anstatt Ergebnisse in Zwischenbehälter zu kopieren. Ähnlich SortedSet.GetViewBetween
Nutzungsmuster wäre etwas entlang der Linien von
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);
Gibt es fertige Lösungen?
Ist Ihr Beispiel korrekt? Was ist das Ergebnis für '[10,35]'? sollte es "König, Bär" oder "König, Puppe" oder "König, Bär, Puppe" sein? – Jehof
Scheint einfach genug, um Ihre eigenen zu schreiben, jeder Grund, warum Sie für eine fertige Lösung dafür suchen? –
Ich denke, dass Sie nach einem Intervallbaum suchen, siehe http://stackoverflow.com/questions/303591/a-range-intersection-algorithm-better-than-on – PartlyCloudy