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

Tha*_*lai 3 ruby ruby-on-rails

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

profile_claimed(boolean) -> profile_complete_status(integer) -> No_of_friends(integer)
Run Code Online (Sandbox Code Playgroud)

代码:

user_profiles.sort { |x| [x.claim ? 0 : 1, x.complete_profile_status, x.no_of_friends] }
Run Code Online (Sandbox Code Playgroud)

如何对用户配置文件进行排序?

spi*_*ann 5

你可以使用sort_by

user_profiles.sort_by do |x| 
  [(x.claim ? 0 : 1), x.complete_profile_status, x.no_of_friends]
end
Run Code Online (Sandbox Code Playgroud)

此外,值得注意的sort_by是,通常比sort因为它缓存比较操作的结果更快,在这种情况下是

(x.claim ? 0 : 1), x.complete_profile_status, x.no_of_friends
Run Code Online (Sandbox Code Playgroud)

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