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{ |line| puts line.to_csv } 还不错。如果需要,您可以随时覆盖 Array#to_csv。

我怀疑 FasterCSV 决定不实现它是因为很难绝对确定这就是程序员想要的。如果输入恰好是 [[1], 2, 3, 4] 怎么办?只看外部数组的第一个元素会让你认为它可能是一个数组数组......

于 2010-09-30T23:37:03.053 回答