【问题标题】:Concatenate Swift Array of Int to create a new Int连接 Int 的 Swift 数组以创建一个新的 Int
【发布时间】:2016-11-05 01:20:10
【问题描述】:

如何将Array<Int> ([1,2,3,4]) 变成普通的Int (1234)?我可以让它走另一种方式(将Int 拆分为单个数字),但我不知道如何组合数组以使数字构成新数字的数字。

【问题讨论】:

    标签: arrays swift int


    【解决方案1】:

    这将起作用:

    let digits = [1,2,3,4]
    let intValue = digits.reduce(0, combine: {$0*10 + $1})
    

    对于 Swift 4+:

    let digits = [1,2,3,4]
    let intValue = digits.reduce(0, {$0*10 + $1})
    

    或者这可以在更多版本的 Swift 中编译:

    (感谢 Romulo BM。)

    let digits = [1,2,3,4]
    let intValue = digits.reduce(0) { return $0*10 + $1 }
    

    注意

    此答案假定输入数组中包含的所有 Int 都是数字 - 0...9 。除此之外,例如,如果要将[1,2,3,4, 56] 转换为Int 123456,则需要其他方式。

    【讨论】:

    • 我用以下数组 [1,2,3,4, 56] 尝试了这个,它给了我 12396,所以我相信这可能不适用于超过一位数的 int 值
    • 此答案专用于每个 Int 表示十进制数的单个数字的情况。我认为命名digits 表达了我对答案的要求......
    • 我明白了。我认为问题是一种更通用的方法将 Int 数组(任意位数)组合为一个。并非专门用于将 Int Array back 转换为单个 Integer。
    • @Prientus,再次阅读问题,OP对要求不够清楚。作者应该考虑读者的想法。我将添加一些关于我的答案要求的注释。谢谢。
    【解决方案2】:

    你也可以进行字符串转换:

    Int(a.map(String.init).joined())
    

    【讨论】:

      【解决方案3】:

      只是另一种解决方案

      let nums:[UInt] = [1, 20, 3, 4]
      if let value = Int(nums.map(String.init).reduce("", combine: +)) {
          print(value)
      }
      

      如果nums 数组中的值大于10,此代码也有效。

      let nums:[UInt] = [10, 20, 30, 40]
      if let value = Int(nums.map(String.init).reduce("", combine: +)) {
          print(value) // 10203040
      }
      

      此代码要求nums 数组仅包含负整数。

      【讨论】:

        【解决方案4】:
        let number = [1, 2, 3].reduce(0){ $0 * 10 + $1 }
        
        print("result: \(number)") // result: 123
        

        【讨论】:

          【解决方案5】:

          你也可以

          let digitsArray = [2, 3, 1, 5]
          if let number = Int.init(d.flatMap({"\($0)"}).joined()) {
              // do whatever with <number>
          }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2020-07-19
            • 2012-11-20
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多