Domanda

Ho un'espressione lambda che ottiene risultati da un dizionario.

var sortedDict = (from entry in dctMetrics 
                  orderby entry.Value descending 
                  select entry);

L'espressione tira indietro le coppie di cui ho bisogno, posso vederli in modalità debug del IDE.

Come faccio a convertire questo ritorno un dizionario dello stesso tipo come la fonte? So TElement di sortedDict è un KeyValuePair, ma sto avendo difficoltà comprendere appieno la sintassi del metodo di estensione ToDictionary. Ho anche provato foreach'ing il risultato var a tratti la costruzione di un nuovo dizionario, ma senza alcun risultato.

C'è qualcosa di simile (funzionalità saggio):

var results = (from entry in dictionary 
               orderby entry.Value descending 
               select entry);
Dictionary<string,float> newDictionary = results as (Dictionary<string,float>);
È stato utile?

Soluzione

Si può fare in questo modo:

var newDictionary = results.ToDictionary(r => r.Key, r => r.Value);

Leggi che come "per ogni coppia di risultati, aggiungere che elemento per il nuovo dizionario, in cui la chiave sarà prodotto come la chiave della coppia, e il valore sarà prodotto come il valore della coppia."

Inoltre, proprio sulla base di codice di esempio - si dovrebbe tenere a mente che un Dictionary<T, U> è implementato come una tabella hash, in modo da non mantenere l'ordine degli elementi si inserisce in esso. Considerare l'utilizzo di un SortedDictionary o un SortedList invece se avete bisogno di una mappa ordinata.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top