2011-10-19 16 views
5

Necesito ordenar un diccionario en VB.net basado en las teclas. Las claves y los valores son todas las cadenas. El diccionario no tiene un .Sort(). ¿Hay alguna forma de hacerlo sin tener que escribir mi propio algoritmo de clasificación?Diccionario de clasificación basado en las claves

+0

¿Qué significa "ordenar un diccionario" para usted? – jason

+0

Lo modifiqué para aclarar eso, pero fue editado. Necesito ordenar el diccionario basado en las llaves. – user489041

+0

No, mira, todavía no dijiste lo que quieres decir con "ordenar un diccionario". Decirme que lo quiere basado en las claves no explica lo que significa para usted "ordenar un diccionario". – jason

Respuesta

1

Exactamente en el trabajo vb.net este código:

 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

Creo que quería 'Order By entry.Key' not' entry.Value' basado en las ediciones de OP. –

+0

Para entry.Key podemos usar SortedDictionary sin ninguna expresión LINQ – apros

2

Si necesita retener el diccionario subyacente y no utilizar un SortedDictionary, se puede utilizar LINQ para devolver un IEnumerable con sede fuera de lo que cada vez que necesita criterios :

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

el SortedDictionary probablemente dar más rendimiento en el uso repetido sin embargo, siempre y cuando no se necesita invertir ese tipo en algún momento en el futuro.

Cuestiones relacionadas