Tengo un diccionario de la Cadena, un Entero, así que la clave es la cadena y el valor es el número entero y quiero pedir las teclas ascendente por el valor del entero. ¿Cómo puedo lograr esto?

OriginalEl autor Theveloper | 2012-07-10

3 Comentarios

  1. 9

    Usted podría utilizar LINQ para ordenar la Dictionary por valor:

    Dim dictionary = New Dictionary(Of String, Integer)() 
    dictionary.Add("A", 2)
    dictionary.Add("B", 4)
    dictionary.Add("C", 5)
    dictionary.Add("D", 3)
    dictionary.Add("E", 1)
    
    Dim sorted = From pair In dictionary
                 Order By pair.Value
    Dim sortedDictionary = sorted.ToDictionary(Function(p) p.Key, Function(p) p.Value)

    Realmente no modificar el Diccionario original, sino que crea un nuevo Diccionario con el nuevo orden.

    Pero: Aparte de la viabilidad, un Dictionary no es un IList (como una Matriz o List<T>). Su finalidad es la búsqueda de una clave de manera muy eficiente, pero no para el bucle de todas las entradas.

    Están desordenadas, lo que significa que aunque usted puede recuperar los elementos en orden con un bucle foreach, que el orden no tiene ningún significado especial, y puede cambiar sin razón aparente.

    OriginalEl autor Rango

  2. 3

    Primero de todo, un diccionario no tienen un orden intrínseco. Es para mirar-ups. Sin embargo, puede girar las llaves en su propia lista ordenada.

    Dim keyList as List(Of String) = (From tPair As KeyValuePair(Of String, Integer) _
                                      In myDictionary Order By tPair.Value Ascending _
                                      Select tPair.Key).ToList

    OriginalEl autor Holger Brandt

  3. 2

    Yo tenía que hacer algo similar a esto con objetos personalizados. Creo que esto debería estar cerca (pero puede no ser exactamente lo que estás buscando:

    Dim sortedL As List(Of KeyValuePair(Of String, Integer)) = yourDictionary.ToList
    sortedL.Sort(Function(firstPair As KeyValuePair(Of String, Integer), nextPair As KeyValuePair(Of String, Integer)) CInt(firstPair.Value).CompareTo(CInt(nextPair.Value)))
    Steve, ¿por qué iba a desalentar el saludo a la persona que hizo la pregunta, y la firma de una abreviatura de mi nombre?
    Me di la vuelta de Steve versión. Las firmas están desanimados y el saludo es innecesario.
    Se satura las preguntas y respuestas con la innecesaria de chatter que es inútil para los demás por el camino que puede tropezar con esta pregunta en la búsqueda de una respuesta a su problema. Saludos personales típicamente se desanime y líneas de la etiqueta se mencionan explícitamente en el FAQ de ser de mala etiqueta en este sitio. Estoy seguro de que si usted mira alrededor del sitio, usted encontrará que es normalmente el caso, incluso en las otras respuestas a esta pregunta.
    Genial!!! Estoy totalmente de acuerdo con eliminar mi lema…pero el saludo? Creo que el saludo es una especie de introducir una solución (y no se dice nada en contra de esto en la sección de Etiqueta). Estos son, después de todo, la gente que estamos hablando. Yo no salto en la conversación sin el primer saludo de la persona con la que estoy hablando.

    OriginalEl autor sacredfaith

Dejar respuesta

Please enter your comment!
Please enter your name here