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?

È stato utile?

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);
    }
);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top