如何将Array<Int>
([1,2,3,4]
)变成常规Int
(1234
)?我可以让它走另一条路(将Int
分成单个数字),但我无法弄清楚如何组合数组,以便数字组成新数字的数字。
答案 0 :(得分:13)
这将有效:
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 }
注意强>
这个答案假设输入数组中包含的所有Ints都是数字 - 0 ... 9。除此之外,例如,如果您想将[1,2,3,4, 56]
转换为Int 123456
,您还需要其他方式。
答案 1 :(得分:3)
您也可以进行字符串转换:
Int(a.map(String.init).joined())
答案 2 :(得分:1)
编辑/更新: Swift 4或更高版本
如果你的整数集合只有一位数元素,我建议使用@OOper提供的真棒solution。
如果您想将常规的整数集合加入一个整数,首先需要知道如何检查每个整数的位数:
extension BinaryInteger {
var numberOfDigits: Int {
return self != 0 ? Int(log10(abs(Double(self)))) + 1 : 1
}
}
然后您可以根据每个元素的位数累计总数:
extension Collection where Element: BinaryInteger {
var digitsSum: Int { return reduce(0, { $0 + $1.numberOfDigits }) }
func joined() -> Int? {
guard digitsSum <= Int.max.numberOfDigits else { return nil }
// (total multiplied by 10 powered to number of digits) + value
return reduce(0) { $0 * Int(pow(10, Double($1.numberOfDigits))) + Int($1) }
}
}
let numbers = [1,2,3,4,56]
let value = numbers.joined() // 123456
答案 3 :(得分:0)
只是另一种解决方案
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 :(得分:0)
let number = [1, 2, 3].reduce(0){ $0 * 10 + $1 }
print("result: \(number)") // result: 123
答案 5 :(得分:0)
您也可以
let digitsArray = [2, 3, 1, 5]
if let number = Int.init(d.flatMap({"\($0)"}).joined()) {
// do whatever with <number>
}