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 № 1arr.sort_by{|a| a.split(".").map &:to_i }
Que lo hará:
split
Cada una de las cuerdas en componentes.- Cambia cada uno de ellos en números enteros (
map &:to_i
) - Compara entre sí estas matrices.