如何将 *正* 数转换为 Swift 中的数字数组
How convert a *positive* number into an array of digits in Swift
我想将一个 正数 数字转换成相应的数字列表——数字也应该是整数。
转换时,比如1024,应该return [1,0,2,4]
在使用 Swift REPL 进行一些搜索和反复试验之后,我想到了这个
var digits:[Int] = Array(String(number)).map { String([=10=]).toInt()! }
请注意!
很关键
您不需要先将其转换为数组。由于字符串是集合,您可以使用免费(非会员)版本的地图:
map(number) { String([=10=]).toInt() }
但要小心你的 !
。如果数字包含非数字,您的代码将在运行时崩溃。如果数字是负数,它将以“-”开头。
你想如何处理这个取决于你想用负数做什么(也许你想要所有的数字都是负数)。但是如果你只是想放弃领先的“-”,你可以这样做:
let strNum = number >= 0 ? String(number) : dropFirst(String(number))
let digits = map(strNum) { String([=11=]).toInt()! }
但以防万一还有另一个可能的非数字字符用于整数的字符串表示,您可能会发现这样做更好:
let digits = map(String(number)) { String([=12=]).toInt() }.filter { [=12=] != nil }.map { [=12=]! }
在 Swift 4.1 或更高版本
let number = 1024
let digits = String(number).compactMap { Int(String([=10=])) }
print(digits) // [1, 0, 2, 4]
在 Swift4
let number = 1024
let digits = String(number).flatMap { Int(String([=11=])) }
print(digits) // [1, 0, 2, 4]
在 Swift2 以及 Swift3
let number = 1024
let digits = String(number).characters.flatMap { Int(String([=12=])) }
print(digits) // [1, 0, 2, 4]
我想将一个 正数 数字转换成相应的数字列表——数字也应该是整数。
转换时,比如1024,应该return [1,0,2,4]
在使用 Swift REPL 进行一些搜索和反复试验之后,我想到了这个
var digits:[Int] = Array(String(number)).map { String([=10=]).toInt()! }
请注意!
很关键
您不需要先将其转换为数组。由于字符串是集合,您可以使用免费(非会员)版本的地图:
map(number) { String([=10=]).toInt() }
但要小心你的 !
。如果数字包含非数字,您的代码将在运行时崩溃。如果数字是负数,它将以“-”开头。
你想如何处理这个取决于你想用负数做什么(也许你想要所有的数字都是负数)。但是如果你只是想放弃领先的“-”,你可以这样做:
let strNum = number >= 0 ? String(number) : dropFirst(String(number))
let digits = map(strNum) { String([=11=]).toInt()! }
但以防万一还有另一个可能的非数字字符用于整数的字符串表示,您可能会发现这样做更好:
let digits = map(String(number)) { String([=12=]).toInt() }.filter { [=12=] != nil }.map { [=12=]! }
在 Swift 4.1 或更高版本
let number = 1024
let digits = String(number).compactMap { Int(String([=10=])) }
print(digits) // [1, 0, 2, 4]
在 Swift4
let number = 1024
let digits = String(number).flatMap { Int(String([=11=])) }
print(digits) // [1, 0, 2, 4]
在 Swift2 以及 Swift3
let number = 1024
let digits = String(number).characters.flatMap { Int(String([=12=])) }
print(digits) // [1, 0, 2, 4]