Ruby:如何一次向csv添加两行



我有一个项目列表和一个为每个项目生成两行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#pushArray#append的工作方式相同,并且可以接受多个参数。编辑:事实证明,CSV.generate生成一个没有这些方法的CSV对象。

你也可以这样做:

CSV.generate do |csv|
  items.each do |item|
    r = rows(item)
    csv << r[0] << r[1]
  end
end

最新更新