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!
let str = "123456789"
let intArray = map(str) { String($0).toInt() ?? 0 }
map()
itère Character
s 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)
}
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))}
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:
intArray
contient des zéros, vous saurez qu'il y avait un 0
dans str
, et pas un autre caractère transformé en zéroInt
qui risque de tout gâcher.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.
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)!}
}
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()
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é.
flatMap
Array
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) }