У меня есть такой массив:
[["09:00",4,15],["09:00",4,15]]
И я хочу вывести это в текстовую область следующим образом:
"09:00",4,15
"09:00",4,15
Пользователь может отредактировать его, а затем я хочу преобразовать его обратно в массив с подмассивами.
Для первого шага я мог бы сделать each
и удалить []
с помощью gsub
, но это не лучший способ. А затем, чтобы превратить его обратно в массив, мне понадобилось бы еще больше кода.
Это своего рода вывод CSV, но я здесь не работаю ни с какими файлами.
Для получения вывода может работать что-то вроде этого:
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
Дано
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]]