RubyにCSV.mapが欲しい。
CSVという邪悪なファイルを扱っていると、CSVの各行を配列のまま取り回すのではなく、各行から必要なデータだけを取り出して小さい配列にしたり、あるいは、自分に都合の良いオブジェクトを生成した上でいろいろと取り回したいことが結構ある。こんな感じ。
books = [] CSV.foreach("path/to/books.csv") do |row| books << Book.new(row[0], row[20], ...) end
当然、この書き方でも動くんだけど、あまりキレイじゃない。
すると、こう書くことになる。
books = CSV.read("path/to/csv").map{|row| Book.new(row[0], ...) }
1行になって嬉しい。
ただ、これだとCSVのサイズによってはread
メソッドで巨大な配列を生成してしまうのが嬉しくない。
そこで、出来れば次のように書いて初めのように動いて欲しい。
books = CSV.map("path/to/csv"){|row| Book.new(row[0], ...) }
RubyのCSVライブラリは非常によくできていると思っていて気に入ってるんだけど、このあたりはちょっとだけ不便に感じてるという個人の日記でした。