在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 }