我有一个项目列表和一个脚本,它为每个项目生成两行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
答案 0 :(得分:1)
CSV.generate do |csv|
csv << items.flat_map(&method(:rows))
end
答案 1 :(得分:1)
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