将新数组视为动态赋值Ruby

时间:2015-02-22 10:36:25

标签: ruby-on-rails ruby

我想制作一个数组,以便为​​每个用户保留分数。该数组的一个示例是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不喜欢每次调用一个方法时实例化一个“常量”。事情是,这不是一个常数......对于登录的每个用户,我将有一个单独的数组)。

2 个答案:

答案 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]