2016-11-23 102 views
2

我試圖將Int數組轉換爲Int數字。我現在所做的是將其轉換爲String陣列,然後使用joined()函數。有沒有更有效的方法來做到這一點?Int數組到Int標準方法

實施例:

let sortedIntArray = String(number).characters.map{Int(String($0)) ?? 0}.sorted(by: { $0 > $1 }) 

let desOrder = Int(sortedIntArray.map{String($0)}.joined())! 

回答

7

在你的情況,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 
1

使用減少的代替圖的方法和加入

let desOrder = Int(sortedIntArray.reduce("") { $0 + String($1) }) 

reduce(intialResult: Result, (Result, Any) throws -> Result) rethrows

1

你問到的效率,爲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 
}