Как преобразовать строку (числовую) в массив Int в Swift

Я хотел бы знать, как преобразовать String в массив Int в Swift. В Java я всегда делал это так:

String myString = "123456789";
int[] myArray = new int[myString.lenght()];
for(int i=0;i<myArray.lenght;i++){
   myArray[i] = Integer.parseInt(myString.charAt(i));
}  

Спасибо всем за помощь!

Ответ 1

let str = "123456789"
let intArray = map(str) { String($0).toInt() ?? 0 }
  • map() выполняет итерацию Character в str
  • String($0) преобразует Character в String
  • .toInt() преобразует String в Int. Если не удалось (??), используйте 0.

Если вы предпочитаете цикл for, попробуйте:

let str = "123456789"
var intArray: [Int] = []

for chr in str {
    intArray.append(String(chr).toInt() ?? 0)
}

ИЛИ, если вы хотите итерировать индексы String:

let str = "123456789"
var intArray: [Int] = []

for i in indices(str) {
    intArray.append(String(str[i]).toInt() ?? 0)
}

Ответ 2

Вы можете использовать flatMap для преобразования символов в строку и преобразования строк в целое число:

Swift 2 или 3

let string = "123456789"
let digits = string.characters.flatMap{Int(String($0))}
print(digits)   // [1, 2, 3, 4, 5, 6, 7, 8, 9]"

Swift 4

let string = "123456789"
let digits = string.flatMap{Int(String($0))}
print(digits)   // [1, 2, 3, 4, 5, 6, 7, 8, 9]"

Swift 4.1

let digits = string.compactMap{Int(String($0))}

Swift 5 или более поздняя версия

let digits = string.compactMap{$0.wholeNumberValue}

Ответ 3

Ответ @rintaro верен, но я просто хотел добавить, что вы можете использовать reduce для отсечения любых символов, которые не могут быть преобразованы в Int, и даже отображать предупреждающее сообщение, если это произойдет:

let str = "123456789"
let intArray = reduce(str, [Int]()) { (var array: [Int], char: Character) -> [Int] in
    if let i = String(char).toInt() {
        array.append(i)
    } else {
        println("Warning: could not convert character \(char) to an integer")
    }
    return array
}

Преимущества:

  • Если intArray содержит нули, вы узнаете, что в str был 0, а не какой-то другой символ, который превратился в нуль
  • вам скажут, есть ли символ Int, который, возможно, закручивает вещи.

Ответ 4

var myString = "123456789"
var myArray:[Int] = []

for index in 0..<countElements(myString) {
    var myChar = myString[advance(myString.startIndex, index)]
    myArray.append(String(myChar).toInt()!)
}

println(myArray)   // [1, 2, 3, 4, 5, 6, 7, 8, 9]"

Чтобы получить iterator, указывающий на char из string, вы можете использовать advance

Метод преобразования string в int в Swift равен toInt()

Ответ 5

Обновление Swift 3:

@appzYourLife: этот правильный метод toInt() больше не доступен для String в Swift 3. В качестве альтернативы вы можете сделать следующее:

intArray.append(Int(String(chr)) ?? 0)

Включение его в Int() преобразует его в Int.

Ответ 6

Swift 3

Массив Int в String

let arjun = [1,32,45,5]
    print(self.get_numbers(array: arjun))

 func get_numbers(array:[Int]) -> String {
        let stringArray = array.flatMap { String(describing: $0) }
        return stringArray.joined(separator: ",")

String to Int Array

let arjun = "1,32,45,5"
    print(self.get_numbers(stringtext: arjun))

    func get_numbers(stringtext:String) -> [Int] {
    let StringRecordedArr = stringtext.components(separatedBy: ",")
    return StringRecordedArr.map { Int($0)!}   
}

Ответ 7

Swift 3: функциональный подход

  • Разделите String на отдельные экземпляры String, используя: components(separatedBy separator: String) -> [String]

Ссылка: возвращает массив, содержащий подстроки из String, которые были разделены данным разделителем.

  1. Используйте метод flatMap Array для обхода коаллеции nil при преобразовании в Int

Ссылка: возвращает массив, содержащий не-nil результаты вызова данного преобразования с каждым элементом этой последовательности.

Реализация

let string = "123456789"
let intArray = string.components(separatedBy: "").flatMap { Int($0) }