Ordena hash ruby

Ordena hash ruby

Un hash o un diccionario (en otros lenguajes de programación) se refiere a una estructura de datos que almacena datos en pares de valor clave. Cada clave en un hash debe ser única y puede ser de cualquier tipo de datos de rubí válido.

Los hashes son increíblemente útiles y pueden ahorrarle mucho tiempo y código cuando se usan adecuadamente. Aunque tienden a comportarse como matrices, los hashes usan claves únicas en lugar de posiciones enteras. Piense en los hashes como un diccionario real donde cada clave es única y posee un significado o valor correspondiente.

En esta guía, aprenderemos cómo clasificar un hash en Ruby utilizando varios métodos. No, no usaremos algoritmos o puntos de referencia. Nos centraremos en los métodos de clasificación de rubí incorporados.

Ruby Hash - Los conceptos básicos

Crear un hash en Ruby es muy sencillo. Comienza definiendo una clave seguida del símbolo => y el valor. Adjuntamos elementos en un hash en un par de aparatos ortopédicos rizados.

"clave" => "valor"

Puede agregar múltiples pares de valor clave separándolos usando comas:

"MS" => "Massachusetts", "id" => "Idaho", "Ga" => "Georgia", "en" => "Indiana"

Ruby también admite otro formato para crear un hash. En lugar de usar notación de cohetes =>, puede usar colons.

"MS": "Massachusetts", "id": "Idaho", "Ga": "Georgia", "in": "Indiana"

Independientemente del método que use para crear un hash rubí, el intérprete Ruby los reconocerá como hashes válidos.

Si desea aprender a trabajar con Ruby Hashes, considere el tutorial:

https: // linuxhint.com/How-to-Use-Ruby-Hashes/

Clasificación de hashes en Ruby

Para ordenar un hash en Ruby sin usar algoritmos personalizados, usaremos dos métodos de clasificación: el sort y sort_by.

Usando los métodos incorporados, podemos ordenar los valores en un hash por varios parámetros.

Déjanos discutir:

#clasificar

El primer método a usar al clasificar un hash es el método de clasificación. El método de clasificación devuelve una matriz de los valores ordenados. Funciona comparando los valores utilizando el operador.

Ejemplo 1

Considere el ejemplo de hash a continuación:

state_info = "Massachusetts" => 78, "Idaho" => 72, "Georgia" => 41, "Indiana" => 45
state_info.clasificar

Una vez que llamamos al método de clasificación contra el hash, devolverá las claves ordenadas en orden alfabético.

[["Georgia", 41], ["Idaho", 72], ["Indiana", 45], ["Massachusetts", 78]]

Notará que el resultado del hash ordenado está en forma de una matriz multidimensional. Como se mencionó, el método de clasificación devuelve una matriz de los valores ordenados.

Para acceder a los pares de valor clave ordenados, puede usar la notación de índice.

sorted_state = state_info.clasificar
sorted_state [0]
["Georgia", 41]

Ejemplo 2

Consideremos un escenario en el que necesitamos ordenar el hash por los valores en lugar de las claves.

Desafortunadamente, no hay una forma directa de clasificar el hash por las teclas. Sin embargo, podemos usar el método de valores para obtener los valores hash y ordenarlos.

Echa un vistazo al ejemplo a continuación:

state_info.valores.clasificar

Una vez que ejecutamos el comando anterior, debemos obtener los valores del hash ordenados en formato de matriz.

[41, 45, 72, 78]

Ejemplo 3

Los valores del método de clasificación son de tipo de matriz. Podemos volver a cambiarlos a hash usando el método To_h.

Mira el ejemplo de abajo:

state_info = "Massachusetts" => 78, "Idaho" => 72, "Georgia" => 41, "Indiana" => 45
state_info.clasificar.to_h

El ejemplo anterior devolverá el hash ordenado como:

"Georgia" => 41, "Idaho" => 72, "Indiana" => 45, "Massachusetts" => 78
#Ordenar por

En el ejemplo 2, implementamos una forma simple de ordenar el hash por valores. Sin embargo, hay un inconveniente: solo ordenamos las teclas y no las teclas.

Para resolver esto, podemos sumergirnos para usar el método Sort_by.

Ejemplo 1

Considere el hash state_info de los métodos anteriores:

state_info = "Massachusetts" => 78, "Idaho" => 72, "Georgia" => 41, "Indiana" => 45

Usando Sort by, podemos realizar la siguiente operación:

state_info.sort_by | k, v | V

Notará que el método usa bloques Ruby para ordenar los valores en el orden especificado. Consulte nuestro tutorial sobre Ruby Do para obtener más información.

El valor resultante es:

[["Georgia", 41], ["Indiana", 45], ["Idaho", 72], ["Massachusetts", 78]]

Entonces, +++ Rting de los valores de la matriz resultante está en orden ascendente. En este ejemplo, incluimos las teclas y sus valores correspondientes.

Del mismo modo, puede revertir el resultado a un hash:

state_info.sort_by | k, v | V.to_h
"Georgia" => 41, "Indiana" => 45, "Idaho" => 72, "Massachusetts" => 78

Ejemplo 2

Por defecto, los métodos de clasificación en Ruby se ordenarán por orden ascendente. Para obtener los valores ordenados en orden inverso, podemos llamar al método #reverse.

state_info = "Massachusetts" => 78, "Idaho" => 72, "Georgia" => 41, "Indiana" => 45
state_info.sort_by | k, v | V.contrarrestar
[["Massachusetts", 78], ["Idaho", 72], ["Indiana", 45], ["Georgia", 41]]

Ejemplo 3

Supongamos que tenemos un hash anidado. ¿Cómo ordenamos los valores dentro del hash anidado??

Considere el siguiente ejemplo hash:

estados =
"Massachusetts" => "ABR" => "Ma", "FIPS_CODE" => 25,
"Idaho" => "ABR" => "ID", "FIPS_CODE" => 16,
"Georgia" => "ABR" => "Ga", "FIPS_CODE" => 13,
"Indiana" => "ABR" => "in", "fips_code" => 18

Para ordenar el hash por los valores del hash anidado, podemos hacer un sort_by como se muestra:

estados.sort_by | k, v | V ["FIPS_CODE"]

Los valores resultantes son como:

[["Georgia", "ABR" => "Ga", "FIPS_CODE" => 13],
["Idaho", "ABR" => "ID", "FIPS_CODE" => 16],
["Indiana", "ABR" => "in", "fips_code" => 18],
["Massachusetts", "ABR" => "ma", "fips_code" => 25]]

Como muestra este ejemplo, los resultados se imprimen ordenados en orden ascendente de los valores en el hash anidado.

Conclusión

Usando este tutorial, observó cómo usar los métodos Sort y Sort_by para clasificar un hash en Ruby. Usando esta guía, puede escribir un código de rubí corto y más eficiente.