私はRubyのブール値がクラスであることを知っています。しかし実際的には、ブール値で配列をソートする方法はありますか(つまり、真の値を持つすべての要素が最初にあります)?RailsでBooleanを持つsort_by
ありがとうございます。
私はRubyのブール値がクラスであることを知っています。しかし実際的には、ブール値で配列をソートする方法はありますか(つまり、真の値を持つすべての要素が最初にあります)?RailsでBooleanを持つsort_by
ありがとうございます。
あなたはカンニングと、それは数を返すために得ることができる:
sort_by { |a| a.thing ? 0 : 1 }
あなたはパーティションを使用して、結果を平らにすることもできます(Railsの中に含まれています)ActiveRecord's orderを使用することにより
partition{|v| v == true}.flatten
私はこの答えが意図をより詳しく表していると思います... –
あなたが安全な側にいて、意図しない変更を避けたい場合は、 'flatten 1) '。ただし、要素を平坦化できないことがわかっている場合は、上記のコードはより簡潔であるため、問題ありません。 http://ruby-doc.org/core-2.3.0/Array.html#method-i-flatten –
ここには2つの異なる方法があるので、私は先に進み、それらをベンチマークしましたブール属性に基づいて27,000項目を並べ替え、最速であるかを確認します
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)
はそうです、SQL側で物事を保つことは間違いなく物事が速くなります。
これはトリックでした...ありがとうございました –