我希望把一个正数转换成相应的数字列表,这些数字也应该是整数。
当将1024转换时,它应该返回[1,0,2,4]。
在 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]
您无需先将其转换为数组。由于字符串是集合,因此可以使用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! }
在搜索和使用Swift REPL进行一些试错尝试之后,我得出了这个结论
var digits:[Int] = Array(String(number)).map { String($0).toInt()! }
!
是关键。
!
应该是安全的。但是,如果使用非成员映射,则可以跳过Array
转换:map(String(number)) { String($0).toInt()! }
。 - Airspeed Velocity!
的危险... - Airspeed Velocityvar digits:[Int] = Array(String(number).characters).map { String($0).toInt()! }
- Lorenzo