0

我正在尝试按数组@users的数量对数组进行排序posts。这是我的控制器中的内容:

@users = User.includes([:posts]).where("user_type = ?", "A")        
@users.sort {|a,b| (a.posts.size <=> b.posts.size)}

以下是我的观点:

<% @users.each do |user| %>
  <%= user.name %>: <%= user.posts.size %>
  <br>
<% end %>

我的用户列表非常随机,并且没有正确排序。如果我没记错的话,<=>操作符就是我想要使用的。我想返回1if ahas more posts than b, -1if bhas more posts than aand 0ifa并且b有相同数量的帖子。

4

3 回答 3

4

这只是缺少的砰砰声。

@users.sort! {|a,b| (a.posts.size <=> b.posts.size)}
于 2013-02-06T21:49:15.017 回答
2

您正在使用sort而不是sort!. 将就地sort!排序。@users

于 2013-02-06T21:49:27.387 回答
0

我看到两件事:

当您必须深入研究对象时,不要使用sort,而是使用。sort_by对于您正在使用的短方法链,它不应该是一个很大的加速,但它可以加起来:

@users.sort_by! {|a| a.posts.size }

如果您从数据库中检索数据,而不是在 Ruby 中进行排序,请使用orderorder_by(取决于支持的选项)让 DBM 按您想要的顺序对数据进行排序。DBM 针对排序进行了优化,并且可以非常快速地完成排序。

于 2013-02-06T22:32:29.693 回答