我有一个项目列表和一个为每个项目生成两行csv的脚本。我可以一次向 csv 生成器添加两行吗?我想要这样的东西:
CSV.generate do |csv|
items.each do |item|
csv << rows(item)
end
end
def rows(item)
return
['value1', 'value2', 'value2'],
['value3', 'value4', 'value5']
end
但是csv <<
不能同时收到两行。
现在我最好的代码是:
CSV.generate do |csv|
items.each do |item|
rows(item).each { |row| csv << row }
end
end
更新:现在,无需一次添加两行的最佳代码如下所示:
CSV.generate do |csv|
items.
flat_map(&method(:rows)).
each(&csv.method(:<<))
end
CSV.generate do |csv|
csv << items.flat_map(&method(:rows))
end
Array#push
或Array#append
的工作方式相同,并且可以接受多个参数。编辑:事实证明,CSV.generate
生成一个没有这些方法的CSV
对象。
你也可以这样做:
CSV.generate do |csv|
items.each do |item|
r = rows(item)
csv << r[0] << r[1]
end
end