又见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
需要阵列的所有条目,并将它们连接成一个字符串。 (可选)参数定义两个元素之间的内容。因此,在您的代码中,您可以使用tab-separartor将所有条目作为csv-line。
最后添加一个换行符。
步骤:
["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"
谢谢克努特。 –