Ruby中将数组转为CSV并实现每行一个元素的方法
解决Ruby CSV写入单行元素的问题
你的原代码里,csv << colors是把整个数组当作CSV的一行多列来写入,所以才会输出逗号分隔的单行内容。要实现每个元素单独占一行,只需要遍历数组,把每个元素单独作为一行写入即可:
require 'CSV' colors = ["red", "blue", "green"] CSV.open("valid_urls.csv", "w") do |csv| colors.each do |color| csv << [color] # 将单个元素包装成数组传入,CSV会把它作为独立一行写入 end end
也可以用更简洁的写法:
require 'CSV' colors = ["red", "blue", "green"] CSV.open("valid_urls.csv", "w") do |csv| colors.each { |color| csv << [color] } end
为什么之前的处理会报错?
你用colors = ["red", "blue", "green"].join "\n"把数组转成了字符串,但CSV的<<方法要求传入的是数组(代表一行的列数据)。当你传入字符串时,CSV内部会尝试调用collect方法处理数据,而字符串本身没有这个方法,所以才会出现undefined method 'collect'的错误。
内容的提问来源于stack exchange,提问作者Mark Locklear
相关产品推荐
相关产品推荐

