全部,我试图计算组中每个用户的胜率,按胜率对用户进行排序,并返回用户的排名 - 即用户在组内设置胜率的位置。
因此,对于胜率最高的用户,该函数应返回“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
我认为一切都应该没问题,但我无法弄清楚如何根据键返回哈希的索引。我认为我可能需要转换为数组数组并使用Array #index;但我也不清楚如何找到一个数组数组的索引。
答案 0 :(得分:0)
如何根据键
返回哈希的索引
您可以使用class ProfileSerializer(serializers.ModelSerializer):
class Meta:
model = Profile
fields = ('username',)
。一个简单的例子:
each_with_index