iOS*_*eek 4 arrays reduce functional-programming ios swift
我有一个包含数组的数组Double
,如截图中所示:
我的目标是获得Double
每个数组元素乘法的总和.这意味着,我想将每个数组的所有元素相乘然后,在我的情况下,我将得到3个值,所以我得到它们的总和.
我想用reduce
,flatMap
?或任何优雅的解决方案
我试过了什么?
totalCombinations.reduce(0.0) { $0 + ($1[0]*$1[1]*$1[2]) }
Run Code Online (Sandbox Code Playgroud)
但只有当我知道包含双精度的数组的大小时,这才起作用.
鉴于这些价值观
let lists: [[Double]] = [[1.1, 2.2, 3.3], [4.4, 5.5, 6.6]]
Run Code Online (Sandbox Code Playgroud)
让我们来看看几种可能的方法
let sum = lists.reduce(0) { $0 + $1.reduce(1, combine: *) }
Run Code Online (Sandbox Code Playgroud)
如果您定义此扩展名
extension SequenceType where Generator.Element == Double {
var product : Double { return reduce(1.0, combine: *) }
}
Run Code Online (Sandbox Code Playgroud)
然后你可以写
let sum = lists.reduce(0) { $0 + $1.product }
Run Code Online (Sandbox Code Playgroud)
通过上面定义的扩展,您也可以编写
let sum = lists.map { $0.product }.reduce(0, combine:+)
Run Code Online (Sandbox Code Playgroud)
如果我们定义这两个后缀运算符
postfix operator +>{}
postfix func +>(values:[Double]) -> Double {
return values.reduce(0, combine: +)
}
postfix operator *>{}
postfix func *>(values:[Double]) -> Double {
return values.reduce(1, combine: *)
}
Run Code Online (Sandbox Code Playgroud)
我们可以写
lists.map(*>)+>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
580 次 |
最近记录: |