在Swift数组中查找元素的总和

什么是最简单(最好)的方式来快速find一个整数数组的总和? 我有一个名为倍数的数组,我想知道倍数的总和。 先谢谢你!

这是我能find的最简单/最短的方法。

Swift 3:

let multiples = [...] sum = multiples.reduce(0, +) 

Swift 2:

 let multiples = [...] sum = multiples.reduce(0, combine: +) 

一些更多信息:

这使用了Array的reduce方法(文档在这里 ),它允许你“通过recursion地应用提供的闭包,把元素的集合减less到一个单一的值”。 我们给它0作为初始值,然后,本质上,closures{ $0 + $1 } 。 当然,我们可以将其简化为单个加号,因为这就是Swift的推出方式。

Swift3已经改为:

 let multiples = [...] sum = multiples.reduce(0, +) 

这也适用:

 let arr = [1,2,3,4,5,6,7,8,9,10] var sumedArr = arr.reduce(0, combine: {$0 + $1}) print(sumedArr) 

结果将是:55

如何简单的方法

 for (var i = 0; i < n; i++) { sum = sum + Int(multiples[i])! } 

//其中n =数组中元素的数量

Swift 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 

尽pipeforms较短,但很多时候你可能更喜欢经典的循环:

 let array = [A(value: 2), A(value: 4)] var sum = 0 array.forEach({ sum += $0.value}) // or for element in array { sum += element.value } 

Swift 3 / Swift 4一个class轮来总结物体的属性

 var totalSum = scaleData.map({$0.points}).reduce(0, +) 

哪些是我试图减less的自定义对象中的属性

Swift 3.0

我有同样的问题,我发现在文档苹果这个解决scheme。

 let numbers = [1, 2, 3, 4] let addTwo: (Int, Int) -> Int = { x, y in x + y } let numberSum = numbers.reduce(0, addTwo) // 'numberSum' == 10 

但是,在我的情况下,我有一个对象的列表,然后我需要改变我的列表的价值:

 let numberSum = self.list.map({$0.number_here}).reduce(0, { x, y in x + y }) 

这个工作对我来说。

一个可能的解决scheme:为它定义一个前缀运算符。 像在APL中那样减less“+ /”运算符(例如,GNU APL)

这里有一个不同的方法。

使用协议genericstypes允许我们在Double,Float和Int数组types上使用此运算符

 protocol Number { func +(l: Self, r: Self) -> Self func -(l: Self, r: Self) -> Self func >(l: Self, r: Self) -> Bool func <(l: Self, r: Self) -> Bool } extension Double : Number {} extension Float : Number {} extension Int : Number {} infix operator += {} func += <T:Number> (inout left: T, right: T) { left = left + right } prefix operator +/ {} prefix func +/ <T:Number>(ar:[T]?) -> T? { switch true { case ar == nil: return nil case ar!.isEmpty: return nil default: var result = ar![0] for n in 1..<ar!.count { result += ar![n] } return result } } 

像这样使用:

 let nmbrs = [ 12.4, 35.6, 456.65, 43.45 ] let intarr = [1, 34, 23, 54, 56, -67, 0, 44] +/nmbrs // 548.1 +/intarr // 145 

(更新了Swift 2.2,在Xcode版本7.3中testing)

Swift 3版本 –

 let someArray = [21, 2, 89, 94, 33, 45, 86, 22, 24, 60] var resultant = someArray.reduce(0, +) 
 @IBOutlet var valueSource: [MultipleIntBoundSource]! private var allFieldsCount: Int { var sum = 0 valueSource.forEach { sum += $0.count } return sum } 

使用这个嵌套参数

Swift 3

从这里显示的所有选项,这是为我工作的。

 let arr = [6,1,2,3,4,10,11] var sumedArr = arr.reduce(0, { ($0 + $1)}) print(sumedArr) 

把事情简单化…

 var array = [1, 2, 3, 4, 5, 6, 7, 9, 0] var n = 0 for i in array { n += i } print("My sum of elements is: \(n)") 

输出:

我的要素总和是:37

这是我的做法。 但是我相信最好的解决scheme是用户名tbd的答案

 var i = 0 var sum = 0 let example = 0 for elements in multiples{ i = i + 1 sum = multiples[ (i- 1)] example = sum + example }