【问题标题】: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
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-09-21
          • 1970-01-01
          • 1970-01-01
          • 2010-09-26
          • 2012-09-07
          相关资源
          最近更新 更多