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

时间:2017-05-24 06:29:54

标签: 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

2 个答案:

答案 0 :(得分:1)

CSV.generate do |csv|
  csv << items.flat_map(&method(:rows))
end

答案 1 :(得分:1)

Array#pushArray#append的工作方式相同,可以采用多个参数。 修改:事实证明,CSV.generate会产生一个CSV对象,它没有这些方法。

你也可以这样做:

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