【发布时间】:2016-11-05 01:20:10
【问题描述】:
如何将Array<Int> ([1,2,3,4]) 变成普通的Int (1234)?我可以让它走另一种方式(将Int 拆分为单个数字),但我不知道如何组合数组以使数字构成新数字的数字。
【问题讨论】:
如何将Array<Int> ([1,2,3,4]) 变成普通的Int (1234)?我可以让它走另一种方式(将Int 拆分为单个数字),但我不知道如何组合数组以使数字构成新数字的数字。
【问题讨论】:
这将起作用:
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,则需要其他方式。
【讨论】:
digits 表达了我对答案的要求......
你也可以进行字符串转换:
Int(a.map(String.init).joined())
【讨论】:
只是另一种解决方案
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数组仅包含非负整数。
【讨论】:
let number = [1, 2, 3].reduce(0){ $0 * 10 + $1 }
print("result: \(number)") // result: 123
【讨论】:
你也可以
let digitsArray = [2, 3, 1, 5]
if let number = Int.init(d.flatMap({"\($0)"}).joined()) {
// do whatever with <number>
}
【讨论】: