C # LINQ Risultato ToDictionary Aiuto
-
21-09-2019 - |
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>);
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.