【问题标题】:Int array to Int standard methodInt 数组到 Int 标准方法
【发布时间】:2017-04-07 07:05:51
【问题描述】:
我正在尝试将 Int 数组转换为 Int 数字。我现在是什么
所做的是将其转换为 String 数组,然后使用 joined() 函数。有没有更有效的方法来做到这一点?
例子:
let sortedIntArray = String(number).characters.map{Int(String($0)) ?? 0}.sorted(by: { $0 > $1 })
let desOrder = Int(sortedIntArray.map{String($0)}.joined())!
【问题讨论】:
标签:
ios
arrays
swift
int
swift3
【解决方案1】:
使用reduce方法代替map和joined
let desOrder = Int(sortedIntArray.reduce("") { $0 + String($1) })
reduce(intialResult: Result, (Result, Any) throws -> Result) rethrows
【解决方案2】:
在您的情况下,sortedIntArray 是 个位 数字的数组,
然后你可以将它们组合起来而不需要任何转换为字符串:
let sortedIntArray = [4, 2, 1]
let result = sortedIntArray.reduce(0) { 10 * $0 + $1 }
print(result) // 421
结合dfri's elegant solution拆分号码
成一个整数数组:
let number = 1439
let descDigits = sequence(state: number, next: { (num: inout Int) -> Int? in
return num > 0 ? (num % 10, num /= 10).0 : nil
}).sorted(by: >)
print(descDigits) // [9, 4, 3, 1]
let descNumber = descDigits.reduce(0) { 10 * $0 + $1 }
print(descNumber) // 9431
【解决方案3】:
你问效率,至于this answer by Martin R,我猜这是最有效的答案
var number = 1992843
var arr = [Int]()
while number > 0 {
arr.append(number % 10)
number = number / 10
}
arr.sort()
arr.reverse()
for n in arr {
number = number * 10
number += n
}