-3

我知道所有键的第一个值都@@logHash包含 IP 地址。如果它不是重复的键,我想只迭代那个位置来为新的哈希创建键。

这是我所拥有的,但我知道它不可能是正确的......

def ipaddresses(@@logHash)
    @@ipHash = Hash.new
    @@logHash[1].each_value do | value |
       if @@ipHash.has_key?(value)
          @@ipHash[value] += "#"
       else
          @@ipHash[value] = "#"
       end
       puts ""
       @@ipHash.sort.each { |key,value| puts "The frequency of #{key} is |#{value}"}
    end
end

任何帮助表示赞赏,谢谢!

丽莎

4

2 回答 2

0

这是一个可能更接近您想要的重新设计的版本:

def ipaddresses(logHash)
  ipHash = Hash.new(0)

  logHash[1].each_value do | value |
    ipHash[value] += 1
    puts ""
  end

  ipHash.sort.each { |key,value| puts "The frequency of #{key} is |#{value}"}
end

目前尚不清楚为什么要@@在这样的方法中使用类变量。在任何情况下使用它们都是非常不寻常的。对于临时变量或方法参数,不需要前缀。

这里Hash.new(0)创建一个默认值为 的新哈希0。这避免了在使用它们之前必须预先初始化键,因为在 Ruby 中添加任何东西都nil被认为是无效的。

于 2012-11-15T04:53:49.780 回答
0

您不能将类变量(或局部变量以外的任何变量)作为参数。这样做没有意义。参数是与方法调用一起传递的东西。如果你想在方法定义中引用一个类变量,你可以直接引用它。通过参数传递它是多余的,因此在设计上是不可能的。

于 2012-11-15T05:03:09.383 回答