我有Int
这样的
let num: Int = 123
现在我想将其拆分为1, 2, 3
之类的数字,并将它们相加以获得6
。
答案 0 :(得分:5)
这是你怎么做的。
s
,最初设置为0. n
定义为您的号码,最初设置为123。n % 10
以提取最后一位数字。 %是模数运算符。将其添加到s
。n = n / 10
删除最后一位数。n
为零,则全部完成。否则回到(3)。答案 1 :(得分:3)
let number = 123
let digitsSum = String(number)
.characters
.flatMap { Int(String($0)) }
.reduce(0, combine: +)
String(number)
第一条指令会将您的Int
转换为String
,所以现在我们有"123"
.characters
这提取了一个Characters
数组,因此输出为["1", "2", "3"]
.flatMap { Int(String($0)) }
这会将Characters
数组转换为Int
数组,以便[1, 2, 3]
.reduce(0, combine: +)
最后,Int
数组的每个元素都与+
操作相结合。所以1 + 2 + 3。
答案 2 :(得分:1)
作为@appzYourLife:s solution的替代方案,您可以使用utf8
的{{1}}属性直接访问您String
表示形式中字符的ASCII值编号
String
由于您知道自己从一个给定的号码变为let number = 123
let foo = String(number)
.utf8.map { Int($0) }
.reduce(0) { $0 + $1 - 48 }
,因此我们确定String
中的所有字符都可以使用{{1}进行表示,而不会丢失编码(实际上甚至是ASCII编码)。字符String
到utf8
的ASCII值由("0"
,此处)数字"9"
到UInt8
表示,因此{{1}的转变在上面的48
操作中。
答案 3 :(得分:0)
您可以将数字转换为字符并枚举它:
let numbs = 123
let str = "\(numbs)"
let a = str.characters.reduce(0) {
return $0 + Int("\($1)")! // Note this is an explicit unwrapped optional in production code you want to replace it with something more safety like if let
}
print("A: \(a)")