在Rails中使用Boolean进行sort_by

Ada*_*NYC 27 ruby sorting boolean ruby-on-rails

我知道Ruby中的boolean是类.但是从实际的角度来看,有没有办法通过布尔值对数组进行排序(即,首先使用所有具有真值的元素)?

谢谢.

Rya*_*igg 79

你可以作弊并让它返回一个数字:

sort_by { |a| a.thing ? 0 : 1 }
Run Code Online (Sandbox Code Playgroud)


小智 17

您可以使用分区然后展平结果:

partition{|v| v == true}.flatten
Run Code Online (Sandbox Code Playgroud)

  • 如果你想保持安全并避免任何意外的改变,你可能想要使用`flatten(1)`.但是,如果您知道元素不能被展平,那么上面的代码就可以了,因为它更简洁.http://ruby-doc.org/core-2.3.0/Array.html#method-i-flatten (3认同)

Num*_*ers 10

通过使用ActiveRecord的顺序(包含在Rails中):

collection.order(thing: :desc)
Run Code Online (Sandbox Code Playgroud)

  • 最佳答案!让我们在 SQL 端而不是在检索到的记录中进行排序。 (2认同)

XML*_*yer 5

由于这里有几种不同的表示方式,我继续对它们进行基准测试,看看哪种最快,根据布尔属性对 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)
Run Code Online (Sandbox Code Playgroud)

所以,是的,将事情保留在 SQL 端肯定会让事情变得更快。