另请参阅Export content of a SQLite3 table in CSV 以获得有关您的问题的答案。
但是要解释代码。让我们分部分尝试:
p (1..10).map{|i| "r" + i.to_s}
结果:
["r1", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10"]
现在让我们详细介绍一下:
(1..10) 是一个 Range 对象。如果你执行
(1..10).to_a
你会得到一个从 1 到 10 的数组:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]。
map 循环范围内的对象,并使用给定块的结果创建一个新数组。所以(1..10).map{|i| "r" + i.to_s} 循环从 1 到 10 的所有值,将值赋给块内部变量 i 并使用 r 和 (+) 数字 i 的字符串表示形式构建一个新字符串(to_s 表示字符串)。
你总共得到一个这样的数组:
["x", "y", "l", "b", "r", "v",
["r1", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10"],
"xxx", "d"
]
flatten 使数组变平。如果数组中有一个数组,则flatten 解析内部数组并使其“平坦”
例子:
[1,[2,3]].flatten #[1, 2, 3]
join 获取数组的所有条目并将它们连接成一个字符串。 (可选)参数定义两个元素之间的内容。因此,在您的代码中,您将所有条目作为带有制表符分隔符的 csv 行。
最后添加一个换行符。
分步:
["x", "y", "l", "b", "r", "v",
["r1", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10"],
"xxx", "d"
].flatten
结果
["x", "y", "l", "b", "r", "v",
"r1", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10", #No inner array any longer
"xxx", "d"
]
那么连接就完成了:
["x", "y", "l", "b", "r", "v",
"r1", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10",
"xxx", "d"
].join("\t")
结果:
"x\ty\tl\tb\tr\tv\tr1\tr2\tr3\tr4\tr5\tr6\tr7\tr8\tr9\tr10\txxx\td"