我知道所有@@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
感谢任何帮助,谢谢!
莉莎
答案 0 :(得分: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中添加任何内容都被视为无效。
答案 1 :(得分:0)
您不能将类变量(或除局部变量之外的任何内容)作为参数。这样做没有意义。参数是与方法调用一起传递的东西。如果要在方法定义中引用类变量,可以直接引用它。通过参数传递它是多余的,因此在设计上是不可能的。