Ruby's ordenar_por es una forma potente y flexible de ordenar colecciones como matrices y hashes basándose en criterios específicos. A diferencia del método más general ordenar método, ordenar_por simplifica el proceso de ordenación cuando se trata de una lógica de ordenación compleja o personalizada. En esta guía, exploraremos la ordenar_por paso a paso, con ejemplos que ayudarán a los principiantes a comprender su utilidad.
¿Qué es el ordenar_por ¿Método?
En ordenar_por es un método Enumerable en Ruby que ordena una colección evaluando un bloque para cada elemento. El bloque devuelve un valor que sirve de base para la ordenación. Este método es especialmente útil cuando los propios elementos no son directamente comparables o cuando se necesita una lógica de ordenación personalizada.
Sintaxis de ordenar_por
collection.sort_by { |element| block }
Toma:
- colección es el array u objeto enumerable que quieres ordenar.
- bloque especifica los criterios que se utilizarán para la clasificación.
En ordenar_por devuelve un nuevo array con los elementos ordenados según los valores devueltos por el bloque.
Ejemplo sencillo
Empecemos con un ejemplo básico de ordenación de un array de cadenas por su longitud.
palabras = [“manzana”, “pera”, “plátano”, “kiwi”].
# Ordenación por longitud de cadena
palabras_ordenadas = palabras.ordenar_por { |palabra| palabra.longitud }
puts palabras_clasificadas.inspeccionar
Producción:
[“pera”, “kiwi”, “manzana”, “plátano”]
Aquí, el bloque { |palabra| palabra.longitud } evalúa la longitud de cada cadena, y ordenar_por utiliza estas longitudes para ordenar la matriz.
Ordenar números
Si tienes un array de números, ordenar_por puede no parecer necesario, pero puede utilizarse para una lógica de ordenación personalizada. Por ejemplo, para ordenar números en función de sus valores absolutos:
números = [10, -5, 3, -8]
números_ordenados = números.ordenar_por { |num| num.abs }
puts números_ordenados.inspeccionar
Producción:
[3, -5, -8, 10]
Aquí, el bloque { |num| num.abs } devuelve el valor absoluto de cada número, y ordenar_por utiliza estos valores para la clasificación.
Clasificación de hash
ordenar_por es especialmente útil para ordenar hashes por sus claves o valores.
puntuaciones = { “Alice” => 90, “Bob” => 75, “Charlie” => 85 }
# Ordenación por valores
puntuaciones_clasificadas = puntuaciones.clasificar_por { |nombre, puntuación| puntuación }
puts puntuaciones_clasificadas.inspeccionar
Producción:
[[“Bob”, 75], [“Charlie”, 85], [“Alice”, 90]]
Tenga en cuenta que ordenar_por devuelve una matriz de pares clave-valor, no un hash. Puede convertirlo de nuevo en un hash utilizando to_h:
sorted_scores_hash = sorted_scores.to_h
puts puntuaciones_clasificadas_hash.inspect
Producción:
{“Bob”=>75, “Charlie”=>85, “Alice”=>90}
Ejemplo avanzado: Ordenación de matrices anidadas
Considere un escenario en el que tiene una matriz anidada de nombres de estudiantes y sus calificaciones, y desea ordenar por calificación.
alumnos = [[“Alice”, 90], [“Bob”, 75], [“Charlie”, 85]]
# Clasificación por grado
estudiantes_ordenados = estudiantes.ordenar_por { |estudiante| estudiante[1] }
puts alumnos_clasificados.inspeccionar
Producción:
[[“Bob”, 75], [“Charlie”, 85], [“Alice”, 90]]
Comparación de ordenar y ordenar_por
En ordenar puede lograr resultados similares, pero requiere una configuración más manual. Por ejemplo:
words.sort { |a, b| a.length b.length }
Aunque funciona, es menos legible que el equivalente ordenar_por:
palabras.ordenar_por { |palabra| palabra.longitud }
Para criterios complejos, ordenar_por suele ser más concisa y fácil de entender.
Cuándo utilizar ordenar_por
Utilice ordenar_por cuando:
- Necesita ordenar por un atributo específico de cada elemento.
- Quiere un proceso de clasificación más limpio y legible.
- El rendimiento es una preocupación para la clasificación compleja, ya que ordenar_por evalúa el bloque una vez por elemento y utiliza los resultados para la ordenación.
Limitaciones de ordenar_por
En ordenar_por es eficaz y fácil de usar, puede que no sea la mejor opción si:
- Necesitas ordenar directamente dentro de un hash sin convertirlo en un array y viceversa.
- Los criterios de clasificación implican múltiples atributos y requieren una lógica de comparación avanzada. En tales casos, ordenar con un bloque personalizado podría ser más apropiado.
Conclusión
En ordenar_por es una herramienta versátil de Ruby que simplifica la ordenación con lógica personalizada. Tanto si trabajas con cadenas, números, matrices o hash, ordenar_por le ayuda a escribir código limpio y eficaz. Si entiendes su sintaxis y sus aplicaciones, podrás aprovechar su potencia para manejar una gran variedad de tareas de ordenación. Experimente con ordenar_por en tus propios proyectos para ver cómo puede agilizar tu código Ruby. RielesCarma ofrece soluciones de software de vanguardia adaptadas a las necesidades de su empresa, especializadas en Desarrollo de Ruby on Rails, y aplicaciones de nivel empresarial.