我有用户个人资料列表。我需要根据以下标准对用户个人资料进行排序,如下所示:
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] }
如何对用户个人资料进行排序?
答案 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
后-1
,y
x
跟{J} 0
或{{1}}后返回{{1}}当他们平等的时候。