-3

すべてのキーの最初の値に@@logHashIP アドレスが含まれていることはわかっています。重複キーでない場合は、その位置だけを繰り返して新しいハッシュのキーを作成したいと思います。

これが私が持っているものですが、それが正しくないことはわかっています...

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

クラス変数 (またはローカル変数以外のもの) を引数として持つことはできません。そんなことをしても意味がありません。引数は、メソッド呼び出しと一緒に渡されるものです。メソッド定義内でクラス変数を参照したい場合は、それを直接参照するだけです。引数を介して渡すことは冗長であるため、設計上不可能になっています。

于 2012-11-15T05:03:09.383 に答える
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 に答える