/ / ¿Cómo puedo ordenar una matriz de cadenas con números como "2.1.2.5"? [cerrado] - rubí, cuerda, entero

¿Cómo puedo ordenar una matriz de cadenas con números como "2.1.2.5"? [cerrado] - rubí, cuerda, entero

Tengo una serie de cadenas:

arr = ["2.1", "2.2", "2.2.1", "2.2.10", "2.2.2", "2.10"]

Si uso arr.sort, el resultado es:

["2.1", "2.10", "2.2", "2.2.1", "2.2.10", "2.2.2"]

Necesito:

["2.1", "2.2", "2.2.1", "2.2.2", "2.2.10", "2.10"]

¿Cómo puedo ordenarlo correctamente?

Pregunta 2:

¿Cómo puedo ordenar los caracteres tipo "alfa" o "beta" como "2.1a" o "0.9b"?

Pregunta 3:

Si tengo una matriz de registros activos con el tipo de campo de cadena, que contiene un número así, ¿es real para establecer en el modelo? default_scope :order => ... con sort_by{|a| a.split(".").map &:to_i }

O

Crear mi método en el modelo de algo como

def my_sort
#sorting
end

Para esto:

Block.all.my_sort

Respuestas

3 para la respuesta № 1
arr.sort_by{|a| a.split(".").map &:to_i }

Que lo hará:

  1. split Cada una de las cuerdas en componentes.
  2. Cambia cada uno de ellos en números enteros (map &:to_i)
  3. Compara entre sí estas matrices.