我有一个像这样的数组:
[["09:00",4,15],["09:00",4,15]]
我想在这样的文本区域中输出它:
"09:00",4,15
"09:00",4,15
用户可以对其进行编辑,然后我想将其转换回具有子数组的数组。
第一步,我可以做一个each
并用[]
删除gsub
,但这似乎不是最好的方法。然后将其转换为数组,我将需要更多代码。
有点像CSV输出,但是我在这里不使用任何文件。
答案 0 :(得分:3)
要产生输出,可以执行以下操作:
input = [["09:00",4,15],["09:00",4,15]]
output = input
.map { |list| list.join(",") }
.join("\n")
puts output
打印:
09:00,4,15
09:00,4,15
然后您可以使用split
将其转换为输入:
result = output
.split("\n")
.map { |line| line.split(",") }
# => [["09:00", "4", "15"], ["09:00", "4", "15"]]
您可能已经注意到,问题在于数字被转换为字符串。这是因为当您在页面上打印某些内容时,不可避免地将其转换为字符串,而Ruby无法只是知道它应该是数字。
如果需要,可以将第二个和第三个元素转换为数字:
result2 = result.map do |(time, num1, num2)|
[time, num1.to_i, num2.to_i]
end
答案 1 :(得分:1)
给予
arr = [["09:00",4,15],["09:00",4,15]]
您可以使用标准库中的CSV模块:
require 'csv'
lines = CSV.generate {|csv| arr.each(&csv.method(:<<))}
# => "09:00,4,15\n09:00,4,15\n"
CSV.parse(lines, converters: :integer)
# => [["09:00", 4, 15], ["09:00", 4, 15]]