Valori .NET SortedDictionary Ma Ordinati per
-
26-09-2019 - |
Domanda
Ho bisogno di una struttura di dati che si comporta come un SortedDictionary<int, double>
ma viene ordinati in base ai valori, piuttosto che le chiavi. Ho bisogno di prendere circa 1-2 microsecondi per aggiungere e rimuovere elementi quando abbiamo circa 3000 articoli nel dizionario.
Il mio primo pensiero è stato semplicemente quello di cambiare le chiavi ei valori nel mio codice. Questo funziona quasi. Posso aggiungere e rimuovere elementi in circa 1,2 microsecondi nel mio test in questo modo.
Ma le chiavi devono essere unici in una SortedDictionary in modo che significa che i valori nel mio dizionario inverso avrebbe dovuto essere unico. E ci sono alcuni casi in cui essi non possono essere.
Tutte le idee su qualcosa nelle librerie .NET già che avrebbe funzionato per me?
Soluzione
PowerCollections biblioteca ha una classe chiamata OrderedMultiDictionary<TKey, TValue>
che è fondamentalmente come un SortedDictionary<TKey, TValue>
ma consente duplicati. Quando si ricerca una chiave, si ottiene un enumerabile invece di un singolo valore.
La biblioteca è gratuito e si dovrebbe essere in grado di fare esattamente quello che vuoi con quella classe -. Memorizzare i valori dei tasti
Altri suggerimenti
È possibile ordinare SortedDictionary per valore in questo modo:
yourList.Sort(
delegate(KeyValuePair<int, double> val1,
KeyValuePair<int, double> val2)
{
return val1.Value.CompareTo(val2.Value);
}
);