我想制作一个数组,以便为每个用户保留分数。该数组的一个示例是ScoreArray["example@yahoo.com"] = 10
。为此,我需要首先实例化Array。所以我尝试了类似的东西:
ScoreArray = Array.new
@sugested.each do |gg|
nr = 0
@followees.each do |ff|
if (ff.email == gg.email) then nr = nr + 1
end
end
if(gg.following.count != 0) then
score = ( nr/@followees.count ) * ( gg.followers.count / gg.following.count)
ScoreArray[gg.email] = score
pry.bind
else score = 0
end
end
所有这些代码都在名为method
的{{1}}内。当我尝试运行candidates
时,我在调用此方法的页面上收到以下错误消息:
rails server
任何想法如何才能避免这个问题?为什么要这样做呢?(从我读过的内容是因为它在一个方法中,ruby不喜欢每次调用一个方法时实例化一个“常量”。事情是,这不是一个常数......对于登录的每个用户,我将有一个单独的数组)。
答案 0 :(得分:2)
在ruby中,一个大写字母表示一个常量 - 如果你不想要一个常量然后以小写字母开头(如果一个局部变量不足以满足你的目的,可以考虑一个实例变量)
此外,在您显示数组时无法使用数组
some_array[gg.email]
如果gg.email
是字符串
答案 1 :(得分:1)
试试这个
score_hash = Hash.new
score_hash[gg.email] = score
sorted_hash = Hash[score_hash.sort_by{|k, v| v}.reverse]