我试图将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)
无需将 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)
斯威夫特 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)
归档时间: |
|
查看次数: |
22491 次 |
最近记录: |