2012-01-05 20 views
21

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 } 

cevap

65

Bunu bir sayısını döndürmek için hile ve alabilir ActiveRecord's order kullanarak

partition{|v| v == true}.flatten 
+1

bunlar hile yaptı ... çok teşekkürler –

15

Sen bölümü kullanın ve sonra sonuçları dümdüz olabilir:

+0

Bence bu cevap niyetini daha fazla ifade ediyor. –

+3

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 –

6

(Rails dahil):

collection.order(thing: :desc) 
+0

En iyi cevap! Alınan kayıtlarda değil, SQL tarafında sipariş verelim. – Roman

4

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.