use*_*tbd 431
这是我能找到的最简单/最短的方法.
Swift 3和Swift 4:
let multiples = [...]
let sum = multiples.reduce(0, +)
print("Sum of Array is : ", sum)
Run Code Online (Sandbox Code Playgroud)
斯威夫特2:
let multiples = [...]
sum = multiples.reduce(0, combine: +)
Run Code Online (Sandbox Code Playgroud)
更多信息:
这使用了Array的reduce方法(此处为文档),它允许您"通过递归应用提供的闭包将元素集合减少到单个值".我们给它0作为初始值,然后,基本上,闭包{ $0 + $1 }.当然,我们可以将其简化为单个加号,因为这就是Swift的滚动方式.
Jes*_*uez 62
Swift 3/Swift 4 one liner用于求和对象的属性
var totalSum = scaleData.map({$0.points}).reduce(0, +)
Run Code Online (Sandbox Code Playgroud)
其中points是我想要减少的自定义对象scaleData中的属性
dev*_*ike 27
Swift3已改为:
let multiples = [...]
sum = multiples.reduce(0, +)
Run Code Online (Sandbox Code Playgroud)
Leo*_*bus 14
在Swift 4中,您还可以将序列元素约束为Numeric协议,以返回序列中所有元素的总和,如下所示
extension Sequence where Element: Numeric {
/// Returns the sum of all elements in the collection
func sum() -> Element { return reduce(0, +) }
}
Run Code Online (Sandbox Code Playgroud)
编辑/更新:
Xcode 10.2•Swift 5或更高版本
我们可以简单地将序列元素限制为新的AdditiveArithmetic协议,以返回集合中所有元素的总和
extension Sequence where Element: AdditiveArithmetic {
func sum() -> Element {
return reduce(.zero, +)
}
}
Run Code Online (Sandbox Code Playgroud)
Xcode 11•Swift 5.1或更高版本
extension Sequence where Element: AdditiveArithmetic {
func sum() -> Element { reduce(.zero, +) }
}
Run Code Online (Sandbox Code Playgroud)
let numbers = [1,2,3]
numbers.sum() // 6
let doubles = [1.5, 2.7, 3.0]
doubles.sum() // 7.2
Run Code Online (Sandbox Code Playgroud)
Mar*_*ida 11
这也有效:
let arr = [1,2,3,4,5,6,7,8,9,10]
var sumedArr = arr.reduce(0, combine: {$0 + $1})
print(sumedArr)
Run Code Online (Sandbox Code Playgroud)
结果将是:55
Mac*_*wia 10
Swift 4的例子
class Employee {
var salary: Int = 0
init (_ salary: Int){
self.salary = salary
}
}
let employees = [Employee(100),Employee(300),Employee(600)]
var sumSalary = employees.reduce(0, {$0 + $1.salary}) //1000
Run Code Online (Sandbox Code Playgroud)
斯威夫特3
如果你有一个通用对象数组,并且想要总结一些对象属性,那么:
class A: NSObject {
var value = 0
init(value: Int) {
self.value = value
}
}
let array = [A(value: 2), A(value: 4)]
let sum = array.reduce(0, { $0 + $1.value })
// ^ ^
// $0=result $1=next A object
print(sum) // 6
Run Code Online (Sandbox Code Playgroud)
尽管形式较短,但很多时候你可能更喜欢经典的for-cycle:
let array = [A(value: 2), A(value: 4)]
var sum = 0
array.forEach({ sum += $0.value})
// or
for element in array {
sum += element.value
}
Run Code Online (Sandbox Code Playgroud)
简单的方法怎么样?
for (var i = 0; i < n; i++) {
sum = sum + Int(multiples[i])!
}
Run Code Online (Sandbox Code Playgroud)
//其中n =数组中元素的数量