我正在尝试构建一个items数组。我循环浏览CSV文件,当我找到匹配项扩展项目列表时。请参阅以下代码:
items = Array.new
csv.each_with_index do |row,i|
items << ["a","b","c"].map {|x| row.to_s.gsub(/XXXXXXXXXX/, x.downcase)}
end
puts items.length
这不会返回到所需的项目数组。我是否将地图的结果错误地附加到数组?
由于
答案 0 :(得分:4)
是的,你在这里做错了:
items << ["a","b","c"].map
项目最终将作为嵌套数组。以下是这里发生的事情的一个例子:
arr = []
arr << [1].map { |x| x }
arr
# => [[1]]
相反,您可以使用+=
。
如果您使用splat运算符,也可以使用push
:
arr = []
arr.push *["a","b","c"].map { |x| x }
arr
# => ["a", "b", "c"]
答案 1 :(得分:0)
根据经验,如果你是:
有一种Ruby Enumerable方法可以帮助您!
在这种情况下,您可以使用flat_map
和with_index
:
csv = %w(1;2;3 4;5;6 7;8;9)
items = csv.flat_map.with_index do |row,i|
["a","b","c"].map {|x| row.to_s.gsub(/[159]/, x.downcase)}
end
p items
#=> ["a;2;3", "b;2;3", "c;2;3", "4;a;6", "4;b;6", "4;c;6", "7;8;a", "7;8;b", "7;8;c"]