2017-11-07 14 views
-1

私は大きなデータファイルを持っています。これにはいくつかのデータが含まれており、プログラムへの入力をクラッシュサイトにマッピングしています。データは とフォーマットされ、各行は別のクラッシュです。 私はそれらを自動的に並べ替えるために以下のrubyスクリプトを実行しようとしましたが、出力は出ませんでした。任意のすべての提案をいただければ幸いです。Rubyのハッシュの問題

# !/usr/bin/ruby                                

fn = ARGV[0] 

$result = Hash.new([]) 

File.open(fn, "r") do |f| 
    f.readlines do |l| 
    ar = l.split 
    puts(ar) 
    $result[ar[1]].push[ar[0]] 
    end 
end 

$result.each do |k, v| 
    puts(k) 
    puts(v) 
end 
+1

「fn」の内容の例を示します。 – Anthony

+0

とcliからスクリプトを呼び出す方法 – xlembouras

答えて

0

は、私はこの問題は、$result = Hash.new([])は/あなたがやりたいことはありません考えていないということだと思います。

ハッシュに存在しないキーを要求したときに同じ配列を返します。また、同じキーに対する後続のリクエストに配列を割り当てません。

代わりにあなたがHash.newのブロックバージョンを使用することができます:あなたは、いくつかのカウントを維持するためにハッシュを使用している場合は、デフォルト値でHash.newのバージョン

result = Hash.new {|hash, key| hash[key] = [] } 

nilチェックの必要性を回避するために、より便利です例えば

counts = Hash.new(0) 
counts['foo'] += 1