Arrays 如何返回散列的索引位置

Arrays 如何返回散列的索引位置,arrays,ruby,hash,Arrays,Ruby,Hash,总之,我试图计算组中每个用户的获胜百分比,按获胜百分比对用户进行排序,然后返回用户的排名——即用户获胜百分比在组中设置的位置 因此,对于获胜百分比最高的用户,函数应该返回“1” 到目前为止,我的代码是: def rank (user, group) users = UserGroup.select(:user_id).where(group_id => group) user = user.id rank = Hash.new users.each do |

总之,我试图计算组中每个用户的获胜百分比,按获胜百分比对用户进行排序,然后返回用户的排名——即用户获胜百分比在组中设置的位置

因此,对于获胜百分比最高的用户,函数应该返回“1”

到目前为止,我的代码是:

def rank (user, group)
    users = UserGroup.select(:user_id).where(group_id => group)
    user = user.id
    rank = Hash.new
    users.each do |user|
      total = Game.where("group_id = ? AND (user1 = ? OR user2 = ?"), group user_id, user_id).count
      win = Game.where(:group_id => group, :winner => user).count
      win_percentage = win/total.to_f
      ranks[:user] = win_percentage
    end
    ranks.sort_by{|key, value|, value}.to_h
    return ranks.each_with_index.detect{|(key, value), index| key == user).last +1
end
我认为一切都应该很好,但我不知道如何返回基于键的散列的索引。我认为我可能需要转换成一个数组,并使用数组#索引;但我也不清楚如何找到数组的索引

如何基于密钥返回哈希的索引

您可以使用带有索引的
每个\u
。一个简单的例子:

hash = {:h=>1, :k=>2, :v=>3}
hash.each_with_index.detect { |(key,value),index| key == :k }
# => [[:k, 2], 1]
hash.each_with_index.detect { |(key,value),index| key == :k }.last
# => 1

不确定您的部分代码是否是有效的Ruby代码。上面的代码是伪代码还是真代码?我使用了active record查询的缩写,即用户、总数和win分配。你看过吗?有趣的是,虽然我不认为这些有帮助,因为我不是在active record中存储Wing%,而是在函数中计算。我或多或少是个初学者,因此,如果可能的话,我希望能有一些支持否决票的理由。否决票本身并没有真正帮助我提高。