【发布时间】:2012-01-05 03:08:38
【问题描述】:
我知道 Ruby 中的布尔值是类。但是从实际的角度来看,有没有办法按布尔值对数组进行排序(即所有元素都具有真值)?
谢谢。
【问题讨论】:
标签: ruby-on-rails ruby sorting boolean
我知道 Ruby 中的布尔值是类。但是从实际的角度来看,有没有办法按布尔值对数组进行排序(即所有元素都具有真值)?
谢谢。
【问题讨论】:
标签: ruby-on-rails ruby sorting boolean
你可以作弊并让它返回一个数字:
sort_by { |a| a.thing ? 0 : 1 }
【讨论】:
您可以使用分区,然后将结果展平:
partition{|v| v == true}.flatten
【讨论】:
flatten(1)。但是,如果您知道元素不能被展平,那么上面的代码就可以了,因为它更简洁。 ruby-doc.org/core-2.3.0/Array.html#method-i-flatten
v == true,因为在这种情况下,v 已经返回 true。
通过使用ActiveRecord's order(包含在 Rails 中):
collection.order(thing: :desc)
【讨论】:
由于这里有几种不同的方式,我继续对它们进行基准测试,看看哪种方式最快,根据布尔属性对 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 端肯定会让事情变得更快。
【讨论】: