2014-02-27 90 views
2

我的每个用户都有一个整数数组。用户参加比赛,我想按他们阵列前7个元素的总和排序。我知道如何独立完成每个部分,但我不知道如何将它们放在一起并在节目中显示。Rails按数组总和排序对象

def show

@competition.users.sort_by{|e| e.daily.first(7).sum} 
for comp in @competition.users 
    p comp.name 
    p comp.daily #Their array 
end 

这是我得到的第一个7个要素(目前在我看来,使用)的总和:

user.daily.first(7).sum 

感谢

回答

2

这将排序用户按其总和的降序排列。总和最高的用户将排在最前面。对于升序排序

@sorted_users = @competition.users.sort_by{|user| -user.daily.first(7).sum} 
for comp in @sorted_users 
    p comp.name 
    p comp.daily #Their array 
end 

取出-或者你可以使用sort_by!将就地做排序

@competition.users.sort_by!{|user| -user.daily.first(7).sum} 
for comp in @competition.users 
    p comp.name 
    p comp.daily #Their array 
end 
+0

我曾尝试这在我的测试案例中,但它似乎并不需要。我是否需要将它保存到列表中?它不会改变打印语句或视图中的任何内容 – Marcus

+0

@ Mhsmith21:请参阅我的编辑 – usha

+0

谢谢。忘了'!'现在找出它做了什么以及它为什么重要。谢谢 – Marcus

0

你的代码是正确的,但你没有储存排序的数据在任何地方

@competition.users.sort_by{|e| e.daily.first(7).sum}.each do |comp| 
    p comp.name 
    p comp.daily #Their array 
end