Reputation: 730
I'd like to know how can I convert a String in an Int array in Swift. In Java I've always done it like this:
String myString = "123456789";
int[] myArray = new int[myString.lenght()];
for(int i=0;i<myArray.lenght;i++){
myArray[i] = Integer.parseInt(myString.charAt(i));
}
Thanks everyone for helping!
Upvotes: 13
Views: 25848
Reputation: 236370
You can use flatMap to convert the characters into a string and coerce the character strings into an integer:
Swift 2 or 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 or later
We can use the new Character Property wholeNumberValue
https://developer.apple.com/documentation/swift/character/3127025-wholenumbervalue
let digits = string.compactMap{$0.wholeNumberValue}
Swift 5.2 or later Key Path Expressions as Functions
let digits = string.compactMap(\.wholeNumberValue)
Upvotes: 19
Reputation: 9
let array = "0123456789".compactMap{ Int(String($0)) }
print(array)
Upvotes: 0
Reputation: 360
String
into separate String
instances using:
components(separatedBy separator: String) -> [String]
Reference: Returns an array containing substrings from the String that have been divided by a given separator.
flatMap
Array
method to bypass the nil
coalescing while converting to Int
Reference: Returns an array containing the non-nil results of calling the given transformation with each element of this sequence.
Implementation
let string = "123456789"
let intArray = string.components(separatedBy: "").flatMap { Int($0) }
Upvotes: 0
Reputation: 1429
Swift 3
Int array to 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)!}
}
Upvotes: 2
Reputation: 113
Swift 3 update:
@appzYourLife : That's correct toInt()
method is no longer available for String in Swift 3.
As an alternative what you can do is :
intArray.append(Int(String(chr)) ?? 0)
Enclosing it within Int()
converts it to Int.
Upvotes: 0
Reputation: 13316
@rintaro's answer is correct, but I just wanted to add that you can use reduce
to weed out any characters that can't be converted to an Int
, and even display a warning message if that happens:
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
}
The advantages are:
intArray
contains zeros you will know that there was a 0
in str
, and not some other character that turned into a zeroInt
character that is possibly screwing things up.Upvotes: 1
Reputation: 51911
let str = "123456789"
let intArray = map(str) { String($0).toInt() ?? 0 }
map()
iterates Character
s in str
String($0)
converts Character
to String
.toInt()
converts String
to Int
. If failed(??
), use 0
. If you prefer for
loop, try:
let str = "123456789"
var intArray: [Int] = []
for chr in str {
intArray.append(String(chr).toInt() ?? 0)
}
OR, if you want to iterate indices of the String
:
let str = "123456789"
var intArray: [Int] = []
for i in indices(str) {
intArray.append(String(str[i]).toInt() ?? 0)
}
Upvotes: 19
Reputation: 8066
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]"
To get the iterator
pointing to a char
from the string
you can use advance
The method to convert string
to int
in Swift is toInt()
Upvotes: 0