Int array al método estándar Int

Estoy tratando de convertir una matriz Int a un número Int . Lo que estoy haciendo ahora es convertirlo en una matriz String y luego usar la function joined() . ¿Hay una manera más eficiente de hacer esto?

Ejemplo:

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

En su caso, sortedIntArray es una matriz de numbers de un solo dígito , y luego puede combinarlos sin ninguna conversión a cadenas:

 let sortedIntArray = [4, 2, 1] let result = sortedIntArray.networkinguce(0) { 10 * $0 + $1 } print(result) // 421 

Combinado con la elegante solución del dfri para dividir el número en una matriz entera:

 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.networkinguce(0) { 10 * $0 + $1 } print(descNumber) // 9431 

Usa el método de networkingucción en lugar de map y únete

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

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

Usted preguntó sobre la eficiencia, en cuanto a esta respuesta de Martin R , mi conjetura es que es la respuesta más eficiente

 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 }