Ordenar arreglos numéricos y de cadenas con Ruby

Hoy veremos cómo ordenar o sortear los arreglos en Ruby. Vamos a trabajar con arreglos de cadenas (strings) y arreglos numéricos (enteros o flotantes); además de que vamos a ver cómo ordenar a los arreglos de manera ascendente y descendente.

Ruby provee un operador interesante que recientemente fue introducido en PHP, el cual es llamado operador nave espacial (quién sabe por qué, yo no le encuentro mucho parecido) y se representa así:

 <=>

Ordenar arreglos en Ruby, arreglos de cadenas y numéricos de forma ascendente y descendente

Ordenar arreglos en Ruby, arreglos de cadenas y numéricos de forma ascendente y descendente

Por  cierto, la foto del código fue tomada con Polacode y le puse la marca de agua con WaterPy.

La peculiaridad de este operador es que evalúa dos valores y regresa 1, 0 o -1 dependiendo de que si uno es mayor, igual o menor al otro. Ya veremos en los ejemplos, el punto es que con esto podemos ordenar y comparar con pocas líneas de código.

Aclaración antes de todo

El operador nave espacial (así lo llamaremos a partir de ahora) puede ser usado para regresar directamente el valor, pero también se puede comparar a los valores manualmente y regresar 0, 1 o -1; no hay diferencia alguna más que en las líneas ahorradas; ambos permiten comparar para ordenar arreglos.

En resumen no importa si usas if, else y elif o el operador.

¿Cómo funciona el ordenamiento?

Internamente Ruby sabe cómo ordenar, nosotros únicamente debemos indicarle si un elemento va antes o después de otro; y esto es dándole un 1 si es mayor, 0 si es igual y -1 si es menor.

El operador nave espacial evalúa esto y nos ahorra comparar y regresar, veamos algunos ejemplos:

Comparando valores en Ruby con el operador nave espacial

Comparando valores en Ruby con el operador nave espacial

Lo mismo podría hacerse con un par de if y else, pero esto es más corto.

El punto es que hay que llamar a la función sort y pasarle una manera de comparar los arreglos; veremos que esto es fácil.

Nota: por defecto, sort ordena de manera ascendente.

Ordenar arreglos numéricos con Ruby

Comencemos ordenando arreglos de números en Ruby. Como lo dije, se llama al método sort. Si no se le pasa método de comparación, entonces lo ordena de manera ascendente.

Si queremos ordenarlo de manera descendente proporcionamos un método de comparación en donde regresamos 1, 0 o -1; o también se puede usar el operador nave espacial (cuyo ejemplo se ve en el siguiente apartado de arreglos de cadenas). Veamos el código:

Así de simple es; nos pasa ambos valores que va a comparar y nosotros le indicamos cuál va primero y cuál después.

Eso sí, recuerda que esto devolverá un nuevo arreglo, ya que el arreglo original permanece intacto. Es importante ver el método de comparación en donde se regresa el valor dependiendo de la si uno es mayor, igual o menor al otro.

Lo mismo que se hace con números se puede hacer con cadena, vamos a ver. Por cierto, esto funciona tanto para flotantes como enteros.

Ordenar arreglos de cadena con Ruby

Ruby permite comparar cadenas como si se tratara de números, pues las trata lexicográficamente; es decir, como en el alfabeto.

Por ejemplo, para Ruby, la letra “a” es menor que la “b” porque va antes en el alfabeto, igualmente la cadena “Luis” va antes de “María José” y así sucesivamente.

Nota: el operador nave espacial también compara cadenas.

Vemos que se hace lo mismo que se hace con los arreglos numéricos pero ahora usamos el operador nave espacial para aprovechar algunas cosas que provee el lenguaje y de esta forma regresar lo que el operador regresa.

Probar ejemplos o descargar

Puedes descargar el código, instalar Ruby y ejecutar ruby archivo.rb (en donde archivo es el nombre de tu archivo) y listo; o puedes probar los ejemplos en línea:

Conclusión

Así de simple se pueden ordenar arreglos en Ruby; estos son ejemplos básicos pero con ellos podemos aprender a ordenar arreglos de objetos u otras cosas como en JavaScript.

Te invito a ver más sobre Ruby y Algoritmos.

Ordenar arreglos numéricos y de cadenas con Ruby

Por parzibyte Tiempo de lectura: 3 min
0