ハッシュのキーを自動的に作成する
2階層のハッシュをいきなり定義する方法は下記の様にやるようです
hash = Hash.new { |h,k| h[k] = {} }
多階層の場合はこれ
hash = Hash.new { |h,k| h[k] = Hash.new(&h.default_proc) }
参照:http://shirusu-ni-tarazu.hatenablog.jp/entry/2013/01/20/054627
すこし改造して、ファイル名をキーにしてファイルの中身1行づつを配列で入れるプログラムを書いてみました。 ハッシュにキーを設定してそれぞれにArray.newを入れるみたいな処理を書かずにぶっこめるので楽。
hash = Hash.new { |h,k| h[k] = Array.new } path = "./data/" files = Dir::entries(path).grep(/.*\.txt/) files.each do |file| IO.foreach(path+file) do |line| sym = File.basename(file, ".txt").to_sym hash[sym] << line end end