如何只迭代ruby哈希中的特定值位置?

时间:2012-11-15 04:45:21

标签: ruby hashmap

我知道所有@@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

感谢任何帮助,谢谢!

莉莎

2 个答案:

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

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