Este post ha sido evaluado por nuestros expertos así se garantiza la veracidad de nuestra esta sección.
Solución:
Parece una abstracción genérica, abramos Enumerable
:
module Enumerable
def sorted?
each_cons(2).all? a, b
end
end
[["a", 3], ["b", 53],["c", 2]].sorted? #=> true
Fíjate que tenemos que escribir (a <=> b) <= 0
en vez de a <= b
porque hay clases que soportan <=>
pero no los operadores de comparación (es decir, Array), ya que no incluyen el módulo Comparable.
También dijo que le gustaría tener la capacidad de "verificar el orden en función de algún parámetro arbitrario":
module Enumerable
def sorted_by?
each_cons(2).all? a, b
end
end
[["a", 3], ["b", 1], ["c", 2]].sorted_by? #=> false
Usando enumerables perezosos (Ruby >= 2.1), podemos reutilizar Enumerable#sorted?
:
module Enumerable
def sorted_by?(&block)
lazy.map(&block).sorted?
end
end
Puedes compararlos de dos en dos:
[["a", 3],["b",53],["c",2]].each_cons(2).all? (p <=> n) != 1 # => true
reducir puede comparar cada elemento con el anterior y detenerse cuando encuentra uno fuera de servicio:
array.reduce
Si estás contento con lo expuesto, tienes el poder dejar un escrito acerca de qué te ha gustado de esta sección.