如何在ruby中按多个属性对数组进行排序?

时间:2015-09-23 15:12:08

标签: ruby-on-rails ruby

我有用户个人资料列表。我需要根据以下标准对用户个人资料进行排序,如下所示:

profile_claimed(boolean) -> profile_complete_status(integer) -> No_of_friends(integer)

代码:

user_profiles.sort { |x| [x.claim ? 0 : 1, x.complete_profile_status, x.no_of_friends] }

如何对用户个人资料进行排序?

2 个答案:

答案 0 :(得分:4)

您可以使用sort_by

user_profiles.sort_by do |x| 
  [(x.claim ? 0 : 1), x.complete_profile_status, x.no_of_friends]
end

同样值得注意的是sort_by通常比sort更快,因为它会缓存比较操作的结果,在本例中是

(x.claim ? 0 : 1), x.complete_profile_status, x.no_of_friends

并且不会重新计算两个元素之间每次比较的值。

答案 1 :(得分:1)

您需要在块中使用sort方法:

ary.sort do |x,y|
  if x > y
    1
  elsif x < y
    -1
  else
    0
  end
end

确保在+1 x跟随y-1y x跟{J} 0或{{1}}后返回{{1}}当他们平等的时候。

http://ruby-doc.org/core-2.2.0/Array.html#method-i-sort