ハッシュのキーを自動的に作成する

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