Saltar al contenido

Compruebe para ver si un array ya esta ordenado?

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.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *