web-dev-qa-db-fra.com

Comment convertir une chaîne (numérique) dans un tableau Int dans Swift

J'aimerais savoir comment puis-je convertir une chaîne dans un tableau Int dans Swift. En Java, je l'ai toujours fait comme ceci:

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

Merci à tous pour votre aide!

12
t0re199
let str = "123456789"
let intArray = map(str) { String($0).toInt() ?? 0 }
  • map() itère Characters dans str
  • String($0) convertit Character en String
  • .toInt() convertit String en Int. En cas d'échec (??), utilisez 0

Si vous préférez la boucle for, essayez:

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

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

OU, si vous souhaitez parcourir les index de String:

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

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

Vous pouvez utiliser flatMap pour convertir les caractères en chaîne et contraindre les chaînes de caractères en un entier: 

Swift 2 ou 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))}
10
Leo Dabus

La réponse de @ rintaro est correcte, mais je voulais simplement ajouter que vous pouvez utiliser reduce pour supprimer tous les caractères qui ne peuvent pas être convertis en Int et même afficher un message d'avertissement si cela se produit:

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
}

Les avantages sont:

  • si intArray contient des zéros, vous saurez qu'il y avait un 0 dans str, et pas un autre caractère transformé en zéro
  • on vous dira s'il y a un caractère non -Int qui risque de tout gâcher.
1
Aaron Rasmussen

Mise à jour de Swift 3:

@appzYourLife: la méthode toInt() est correcte n'est plus disponible pour String dans Swift 3. Vous pouvez également effectuer les opérations suivantes:

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

Le placer dans Int() le convertit en Int.

0
iCode

Swift 3

Int tableau à chaîne

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: ",")

Chaîne à 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)!}   
}
0
Arjun Yadav
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]"

Pour que iterator pointe vers char parmi string, vous pouvez utiliser advance

La méthode pour convertir string en int dans Swift est toInt()

0
Jérôme Leducq

Swift 3: approche fonctionnelle

  1. Divisez la String en différentes instances String en utilisant: components(separatedBy separator: String) -> [String]

Référence: renvoie un tableau contenant des sous-chaînes de la chaîne divisées par un séparateur donné.

  1. Utilisez la méthode flatMapArray pour contourner la fusion nil lors de la conversion en Int

Référence: renvoie un tableau contenant les résultats non nuls de l'appel de la transformation donnée avec chaque élément de cette séquence.

La mise en oeuvre

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