2011-10-19 16 views
5

Ho bisogno di ordinare un dizionario in VB.net basato sui tasti. Le chiavi e i valori sono tutte stringhe. Il dizionario non ha un .Sort(). C'è un modo per farlo senza dover scrivere il mio algoritmo di ordinamento?Ordina dizionario basato sui tasti

+0

Cosa significa per te "ordinare un dizionario"? – jason

+0

L'ho modificato per chiarirlo, ma è stato modificato. Ho bisogno di ordinare il dizionario in base alle loro chiavi. – user489041

+0

No, vedi, non hai ancora detto cosa intendi con "ordina un dizionario". Dicendomi che vuoi che sia basato sui tasti non spiega cosa significhi per te "ordinare un dizionario". – jason

risposta

1

Esattamente nel lavoro vb.net questo codice:

 Dim myDict As New Dictionary(Of String, String) 
     myDict.Add("one", 1) 
     myDict.Add("four", 4) 
     myDict.Add("two", 2) 
     myDict.Add("three", 3) 

     Dim sortedDict = (From entry In myDict Order By entry.Value Ascending).ToDictionary(Function(pair) pair.Key, Function(pair) pair.Value) 

     For Each entry As KeyValuePair(Of String, String) In sortedDict 
      Console.WriteLine(String.Format("{0,10} {1,10}", entry.Key, entry.Value)) 
     Next 
+0

Penso che tu volessi 'Ordina per entry.Key' non' entry.Value' in base alle modifiche dell'OP. –

+0

Per entry.Key possiamo usare SortedDictionary senza alcuna espressione LINQ – apros

2

Se è necessario mantenere il dizionario sottostante e non utilizzare un SortedDictionary, è possibile utilizzare LINQ per restituire un oggetto IEnumerable in base al largo di che cosa mai criteri avete bisogno :

Dim sorted = From item In items 
      Order By item.Key 
      Select item.Value 

il SortedDictionary sarebbe probabilmente dare più prestazioni in condizioni di utilizzo ripetuto però il tempo che non ha bisogno di invertire questo genere ad un certo punto in futuro.

Problemi correlati