Как преобразовать строку (числовую) в массив 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, которые были разделены данным разделителем.
- Используйте метод
flatMap
Array
для обхода коаллеции nil
при преобразовании в Int
Ссылка: возвращает массив, содержащий не-nil результаты вызова данного преобразования с каждым элементом этой последовательности.
Реализация
let string = "123456789"
let intArray = string.components(separatedBy: "").flatMap { Int($0) }