Ruby'de boole sınıfları olduğunu biliyorum. Fakat pratik bakış açısından, bir diziyi boolean (yani, ilk önce tüm değerler ile ilk değer) ile sıralamak için bir yol var mı?Radarda Boole ile sort_by
Teşekkür ederiz.
sort_by { |a| a.thing ? 0 : 1 }
Ruby'de boole sınıfları olduğunu biliyorum. Fakat pratik bakış açısından, bir diziyi boolean (yani, ilk önce tüm değerler ile ilk değer) ile sıralamak için bir yol var mı?Radarda Boole ile sort_by
Teşekkür ederiz.
sort_by { |a| a.thing ? 0 : 1 }
Bunu bir sayısını döndürmek için hile ve alabilir ActiveRecord's order kullanarak
partition{|v| v == true}.flatten
Sen bölümü kullanın ve sonra sonuçları dümdüz olabilir:
Bence bu cevap niyetini daha fazla ifade ediyor. –
Eğer güvenli tarafta olmak ve istenmeyen değişiklikleri önlemek istiyorsanız, 'flatten kullanmak isteyebilirsiniz 1) '. Ancak, öğelerin düzleştirilemediğini biliyorsanız, yukarıdaki kod daha ayrıntılı olduğu için iyidir. http://ruby-doc.org/core-2.3.0/Array.html#method-i-flatten –
(Rails dahil):
collection.order(thing: :desc)
En iyi cevap! Alınan kayıtlarda değil, SQL tarafında sipariş verelim. – Roman
Burada temsil edilen birkaç farklı yol olduğundan, ben ilerledim ve karşılaştırdım.
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)
Yani evet, SQL tarafında şeyler tutmak kesinlikle daha hızlı işler yapar: bir boolean özelliğe göre 27.000 ürün sıralama, en hızlı olduğunu görmek için.
bunlar hile yaptı ... çok teşekkürler –