Swift: как преобразовать вход readLine () "[-5,20,8 ...]" в массив Int - PullRequest
0 голосов
/ 23 февраля 2020

Я уже запустил поиск сегодня и обнаружил похожую проблему здесь , но это не полностью решило проблему. В моем случае я хочу преобразовать входную строку readLine "[3,-1,6,20,-5,15]" в массив Int [3,-1,6,20,-5,15].

Я выполняю онлайн-задание по кодированию с одного веб-сайта, который требует ввода контрольного примера из readLine () .

Например, если я ввожу [1,3, -5,7,22,6,85,2] в консоль, мне нужно преобразовать его в тип массива Int. После этого я мог разобраться с частью алгоритма для решения квеста. Ну, я думаю, что не стоит ограничивать ввод как readLine (), но просто ничего не мог с этим поделать: (

Мой код, как показано ниже, может работать с положительным массивом только с числами, меньшими 10. Но для этого массива, [1, -3, 22, -6, 5,6,7,8,9] он даст числа как [1, 3, 2, 2, 6, 5, 6, 7, 8, 9], как я могу правильно преобразовать вход readLine ()?

print("please give the test array with S length")
if let numsInput = readLine() {
    let nums = numsInput.compactMap {Int(String($0))}
    print("nums: \(nums)")
}

Ответы [ 2 ]

0 голосов
/ 23 февраля 2020

Вот один вкладыш для преобразования входных данных в массив целых чисел. Конечно, вы можете разделить это на отдельные шаги, если требуется некоторая проверка

let numbers = input
    .trimmingCharacters(in: .whitespacesAndNewlines)
    .dropFirst()
    .dropLast()
    .split(separator: ",")
    .compactMap {Int($0)}

dropFirst/dropLast можно заменить на замену с помощью регулярного выражения

.replacingOccurrences(of: "[\\[\\]]", with: "", options: .regularExpression)
0 голосов
/ 23 февраля 2020

Используйте метод split для получения последовательности строк из входной строки

let nums = numsInput.split(separator: ",").compactMap {Int($0)}

...