web-dev-qa-db-de.com

So konvertieren Sie einen String (numerisch) in einem Int-Array in Swift

Ich würde gerne wissen, wie ich einen String in einem Int-Array in Swift konvertieren kann. In Java habe ich das immer so gemacht:

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

Danke an alle für die Hilfe!

12
t0re199
let str = "123456789"
let intArray = map(str) { String($0).toInt() ?? 0 }
  • map() durchläuft Characters in str
  • String($0) konvertiert Character in String
  • .toInt() konvertiert String in Int. Wenn dies nicht der Fall ist (??), verwenden Sie 0

Wenn Sie die for-Schleife bevorzugen, versuchen Sie Folgendes:

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

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

ODER, wenn Sie Indizes der String durchlaufen möchten:

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

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

Sie können flatMap verwenden, um die Zeichen in eine Zeichenfolge umzuwandeln und die Zeichenketten in eine Ganzzahl umzuwandeln: 

Swift 2 oder 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

@rintaros Antwort ist korrekt, aber ich wollte nur hinzufügen, dass Sie reduce verwenden können, um alle Zeichen auszusondern, die nicht in ein Int-Zeichen konvertiert werden können. In diesem Fall wird sogar eine Warnmeldung angezeigt:

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
}

Die Vorteile sind:

  • wenn intArray Nullen enthält, werden Sie wissen, dass str einen 0 enthielt, und nicht irgendein anderes Zeichen, das sich in eine Null verwandelte
  • sie werden informiert, wenn es einen Nicht-Int-Charakter gibt, der möglicherweise die Dinge vermasselt.
1
Aaron Rasmussen

Swift 3 Update:

@appzYourLife: Das ist die richtige toInt()-Methode für String in Swift 3 nicht mehr verfügbar. Als Alternative können Sie Folgendes tun:

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

Das Einschließen in Int() konvertiert es in Int.

0
iCode

Swift 3

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

Zeichenfolge in 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]"

Um die iterator von der char auf eine string zu zeigen, können Sie advance verwenden.

Die Methode zum Konvertieren von string in int in Swift ist toInt()

0
Jérôme Leducq

Swift 3: funktionaler Ansatz

  1. Teilen Sie die String in separate String-Instanzen auf: components(separatedBy separator: String) -> [String]

Referenz: Gibt ein Array zurück, das Teilstrings aus dem String enthält, die durch ein angegebenes Trennzeichen geteilt wurden.

  1. Verwenden Sie die flatMapArray-Methode, um die nil-Koaleszenz während der Konvertierung in Int zu umgehen.

Referenz: Gibt ein Array zurück, das die Nicht-Null-Ergebnisse des Aufrufs der angegebenen Transformation mit jedem Element dieser Sequenz enthält.

Implementierung

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