Swift - 将Int拆分为各自的数字

Do2*_*Do2 26 swift

我试图将Int分成各自的数字,例如3489到3 4 8 9,然后我想把数字放在Int数组中.

我已经尝试将数字放入一个字符串然后迭代每个数字,但它不起作用:

var number = "123456"

var array = [Int]()

for digit in number {
    array.append(digit)
}
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

Leo*_*bus 59

更新:Xcode 9•Swift 4

您可以创建一个字符数组并将它们平面映射到Int,如下所示:

let string = "123456"

let digits = string.compactMap{ $0.wholeNumberValue } // [1, 2, 3, 4, 5, 6]
Run Code Online (Sandbox Code Playgroud)

您还可以扩展Integer类型:

extension StringProtocol  {
    var digits: [Int] { compactMap{ $0.wholeNumberValue } }
}
extension LosslessStringConvertible {
    var string: String { .init(self) }
}
extension Numeric where Self: LosslessStringConvertible {
    var digits: [Int] { string.digits }
}
Run Code Online (Sandbox Code Playgroud)

Xcode 8.2.1•Swift 3.0.2

您可以创建一个字符数组并将它们平面映射到Int,如下所示:

let string = "123456"
let digits = string.digits // [1, 2, 3, 4, 5, 6]
Run Code Online (Sandbox Code Playgroud)

您还可以扩展Integer类型:

let integer = 123
let integerDigits = integer.digits // [1, 2, 3]
Run Code Online (Sandbox Code Playgroud)

编辑:根据doisk的建议,您也可以使用flatMap来嵌套结果.

let double = 12.34
let doubleDigits = double.digits   // // [1, 2, 3, 4]
Run Code Online (Sandbox Code Playgroud)

  • 试试这个:`让nestedInts = [123,456]; nestedInts.flatMap {$ 0.array}`应该给你:`[1,2,3,4,5,6]` (2认同)

Tia*_*uto 8

无需将 int 转换为字符串的解决方案....

例子

1234%10 = 4 <-
1234/10 = 123
123%10 = 3 <-
123/10 = 12
12%10 = 2 <- 
12/10 = 1
1%10 = 1 <-

var num = 12345
var arrayInt = [Int]()
arrayInt.append(num%10)
while num >= 10 {
  num = num/10
  arrayInt.insert(num%10, at: 0)
}
Run Code Online (Sandbox Code Playgroud)


osc*_*arr 5

斯威夫特 5

extension Int {
    func digits() -> [Int] {
        var digits: [Int] = []
        var num = self
        
        digits.append(num % 10)
        
        while num >= 10  {
            num = num / 10
            digits.append(num % 10)
        }
        
        return digits.reversed()
    }
}
Run Code Online (Sandbox Code Playgroud)