0

次のコード:

[1,3,5].to_csv
  => "1,3,5\n"       # this is good

[[1,3,5], [2,4,6]].to_csv
  => "135,246\n"     # why doesn't it just do it for array of array?

ただし、代わりにこれが必要です。

data = [[1,3,5], [2,4,6]]
csv_string = FasterCSV.generate do |csv|
  data.each {|a| csv << a}  
end
 => "1,3,5\n2,4,6\n"

以下:

data = [[1,3,5], [2,4,6]]
csv_string = FasterCSV.generate {|csv| data.each {|a| csv << a}}
 => "1,3,5\n2,4,6\n"

問題は、配列の配列が与えられたときに、なぜto_csvそれを自動的に処理するように設計されていないのかということです。そのため、Railsでは次のことができます。

respond_to do |format|
  format.csv { render :text => data.to_csv }
4

1 に答える 1

1

[[1,3,5], [2,4,6]].each{ |行| puts line.to_csv } はそれほど悪くありません。必要に応じて、いつでも Array#to_csv をオーバーライドできます。

FasterCSV がそれを実装しないという決定を下したのは、プログラマーがそれを望んでいるかどうかを完全に確信するのが難しいためだと思います。入力がたまたま [[1], 2, 3, 4] だったら? 外側の配列の最初の要素を見るだけで、配列の配列かもしれないと思うでしょう...

于 2010-09-30T23:37:03.053 に答える