Sé que booleano en Ruby son clases. Pero desde el punto de vista práctico, ¿hay alguna forma de ordenar una matriz por booleano (es decir, con todos los elementos con valor verdadero primero)?sort_by con Boolean en Rails
Gracias.
Sé que booleano en Ruby son clases. Pero desde el punto de vista práctico, ¿hay alguna forma de ordenar una matriz por booleano (es decir, con todos los elementos con valor verdadero primero)?sort_by con Boolean en Rails
Gracias.
Se puede engañar y conseguir que vuelva un número:
sort_by { |a| a.thing ? 0 : 1 }
Usted podría utilizar la partición y luego aplanar los resultados:
partition{|v| v == true}.flatten
Creo que esta respuesta expresa la intención más .... –
Si quieres estar seguro y evitar los cambios involuntarios, es posible que desees utilizar 'aplanar (1) '. Sin embargo, si sabes que los elementos no se pueden aplanar, entonces el código anterior está bien, ya que es más conciso. http://ruby-doc.org/core-2.3.0/Array.html#method-i-flatten –
Mediante el uso de ActiveRecord's order (incluido en rieles):
collection.order(thing: :desc)
¡La mejor respuesta! Hagamos el pedido en el lado SQL no en los registros recuperados. – Roman
Dado que hay un par de formas diferentes representadas aquí, seguí adelante y las comparé para ver cuál es el más rápido, clasificación 27,000 artículos basados en un atributo booleano:
Rehearsal ---------------------------------------------
sort_by 0.070000 0.000000 0.070000 ( 0.075203)
partition 0.110000 0.000000 0.110000 ( 0.114667)
order 0.000000 0.000000 0.000000 ( 0.000046)
------------------------------------ total: 0.180000sec
user system total real
sort_by 0.010000 0.000000 0.010000 ( 0.016611)
partition 0.110000 0.000000 0.110000 ( 0.111384)
order 0.000000 0.000000 0.000000 ( 0.000047)
Así que sí, mantener las cosas en el lado de SQL definitivamente hace las cosas más rápido.
estos hicieron el truco ... muchas gracias –