RubyでCSVを扱うときは配列をハッシュにすると便利な件
RubyでCSVを扱う場合は標準ライブラリのCSVか、FasterCSVを使うことが多いと思います。どちらのライブラリも以下のような感じでCSVの1行を配列にしてブロックに渡してくれます。
CSV.open("test.csv", 'r') do |row| p row # => ["Yamada", "30", "180"] p row[0] # => "Yamada" p row[1] # => "30" p row[2] # => "180" end
このときCSVのカラム数が少なければrow[0], row[1]のようにして配列のインデックスアクセスで十分なのですが、カラム数が多くなると、あのデータは何カラム目にあるだっけ? となることがよくあります。
そこでハッシュですよ。
例えば、CSVデータが名前、年齢、身長の順に並んでいるなら、以下のようにカラム名をキーとしたハッシュにすると便利です。
keys = [:name, :age, :height] CSV.open("test.csv", 'r') do |row| p hashed_row = Hash[*keys.zip(row).flatten] # => {:age=>"30", :height=>"180", :name=>"Yamada"} p hashed_row[:name] # => "Yamada" p hashed_row[:age] # => "30" p hashed_row[:height] # => "180" end