sort_by с логическим значением в Rails - PullRequest
24 голосов
/ 05 января 2012

Я знаю, что логические в Ruby - это классы.Но с практической точки зрения, есть ли способ сортировки массива по логическому (т.е. со всеми элементами с истинным значением первым)?

Спасибо.

Ответы [ 4 ]

75 голосов
/ 05 января 2012

Вы можете обмануть и заставить его вернуть номер:

sort_by { |a| a.thing ? 0 : 1 }
17 голосов
/ 05 января 2012

Вы можете использовать раздел, а затем сгладить результаты:

partition{|v| v == true}.flatten
8 голосов
/ 16 декабря 2014

Используя Порядок ActiveRecord (включен в Rails):

collection.order(thing: :desc)
4 голосов
/ 10 октября 2015

Так как здесь представлено несколько различных способов, я пошел вперед и проверил их, чтобы определить, какой из них самый быстрый, отсортировав 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 определенно делает вещи быстрее.

...