如何在Swift中将一个*正数*转换为数字数组

4

我希望把一个正数转换成相应的数字列表,这些数字也应该是整数。

当将1024转换时,它应该返回[1,0,2,4]。

3个回答

10

在 Swift 4.1 或更高版本中

let number = 1024
let digits = String(number).compactMap { Int(String($0)) }
print(digits) // [1, 0, 2, 4]

在 Swift4 中

let number = 1024
let digits = String(number).flatMap { Int(String($0)) }
print(digits) // [1, 0, 2, 4]

在Swift2和Swift3中

let number = 1024
let digits = String(number).characters.flatMap { Int(String($0)) }
print(digits) // [1, 0, 2, 4]

2

您无需先将其转换为数组。由于字符串是集合,因此可以使用map的免费(非成员)版本:

map(number) { String($0).toInt() }

但是要注意你的。如果数字包含非数字字符,您的代码将在运行时崩溃。而且如果数字为负数,则以“-”开头。

如何处理这取决于您想对负数做什么(也许您希望所有数字都为负数)。但是如果您只想去掉前导“ - ”,可以执行以下操作:

let strNum = number >= 0 ? String(number) : dropFirst(String(number))
let digits = map(strNum) { String($0).toInt()! }

但是,如果字符串表示整数的可能存在其他非数字字符,您最好使用以下方法:

let digits = map(String(number)) { String($0).toInt() }.filter { $0 != nil }.map { $0! }

1

在搜索和使用Swift REPL进行一些试错尝试之后,我得出了这个结论

var digits:[Int] = Array(String(number)).map { String($0).toInt()! }

请注意,!是关键。

想问一下,你能不能像这里的最佳回答建议的那样做:字符串转数组 - CyanogenCX
2
抱歉,我最初误读了您的帖子,以为您想要将字符串而不是整数转换为数字 - 我已删除了我的答案,因为您的答案很好,并且 ! 应该是安全的。但是,如果使用非成员映射,则可以跳过 Array 转换:map(String(number)) { String($0).toInt()! } - Airspeed Velocity
1
啊哈 - 除了我忘记了负数,所以仍然存在崩溃的风险。这只是表明您永远不能低估的危险... - Airspeed Velocity
更新为Swift 2:var digits:[Int] = Array(String(number).characters).map { String($0).toInt()! } - Lorenzo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接