2010-04-11 5 views
5

Ich brauche eine Datenstruktur, die wie ein SortedDictionary<int, double> fungiert, aber basierend auf den Werten und nicht die Schlüssel sortiert wird. Ich brauche es etwa 1-2 Mikrosekunden, um Elemente hinzuzufügen und zu entfernen, wenn wir etwa 3000 Elemente im Wörterbuch haben..NET SortedDictionary Aber nach Werten sortiert

Mein erster Gedanke war einfach, die Schlüssel und Werte in meinem Code zu wechseln. Das funktioniert fast. Ich kann Elemente in ungefähr 1,2 Mikrosekunden in meinen Tests hinzufügen und entfernen, indem ich dies tue.

Die Schlüssel müssen jedoch in einem SortedDictionary eindeutig sein, so dass die Werte in meinem inversen Wörterbuch eindeutig sein müssen. Und es gibt Fälle, in denen sie nicht sein könnten.

Irgendwelche Ideen von etwas in den .NET-Bibliotheken, die bereits für mich arbeiten würden?

+0

ich SortedList gehe davon aus <> nicht erfüllt, dass die Leistung? –

+0

Können Sie erklären, was die Schlüssel und Werte in Ihrer Domain darstellen? –

+0

@Simon Ich denke, dass SortedList <> auch nach Schlüsseln sortiert ist. http://msdn.microsoft.com/en-us/library/system.collections.sortedlist.aspx –

Antwort

1

Die PowerCollections Bibliothek hat eine Klasse namens OrderedMultiDictionary<TKey, TValue>, die im Grunde wie ein SortedDictionary<TKey, TValue> ist, aber Duplikate ermöglicht. Wenn Sie einen Schlüssel suchen, erhalten Sie einen Aufzählungswert anstelle eines einzelnen Werts.

Die Bibliothek ist kostenlos und Sie sollten in der Lage sein, genau das zu tun, was Sie mit dieser Klasse wollen - speichern Sie die Werte als Schlüssel.

+0

Wow, das ist großartig! Lassen Sie mich herunterladen und sehen, ob es 1-2 uns wirklich schnell macht. –

+0

Hinweis: Wenn Sie diese Bibliothek nicht verwenden möchten, können Sie dies immer selbst mit einem 'SortedDictionary' implementieren und einfach eine' Liste 'als Wert anstelle eines einzelnen' T' speichern. – Aaronaught

+0

Add/Remove ist etwa 30 Mikrosekunden für die PowerCollections-Bibliothek. Ziemlich nah, aber ich bin mir nicht sicher, ob es genug für diese App ist. Danke für den Zeiger. Das SortedDictionary > ist auch eine gute Idee, lassen Sie mich sehen, ob ich das zeitlich kann. Ein weiterer Gedanke, den ich hatte, war, einfach das SortedDictionary zu verwenden, um einen winzigen zufälligen Term der Ordnung .0000001 hinzuzufügen, der meine Werte eindeutig machen würde, aber das Ergebnis nicht beeinflussen würde. –

3

Sie können SortedDictionary von Wert wie folgt sortiert:

yourList.Sort(
    delegate(KeyValuePair<int, double> val1, 
    KeyValuePair<int, double> val2) 
    { 
     return val1.Value.CompareTo(val2.Value); 
    } 
); 
+0

Innovativ. Ich mag das. – Armstrongest

Verwandte Themen