如何将 *正* 数转换为 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]