Array Reduce 或类似的
Array Reduce or similar
我有一个数组:
const assets = [{
type: 'X',
value: 322.12
}, {
type: 'X',
value: 413.21
}]
我想要值的总和 (735,33)
在node.js中我可以使用:const sum = assets.reduce((s, val) => ( s = s + val.value), 0)
我如何在 Go 中做同样的事情?
我会去 Modf()
i = 0
f = 0
for _, asset := range assets {
integer, frac := Modf(asset.value)
i += integer
f += math.Round(frac*100)/100))
}
fmt.Println(i, f)
Here 是一个不完整的实现,但它让您了解为什么这是一个坏主意和非惯用的 Go:
package main
import "fmt"
type Array []int
type ReducerFn func(prev int, next int) int
func (arr Array) Reduce(fn ReducerFn, i int) int {
prev := i
for _, v := range arr {
prev = fn(prev, v)
}
return prev
}
func main() {
i := Array([]int{1,2,4})
fmt.Println(i.Reduce(func(prev int, next int) int {
return prev + next
}, 10))
}
由于 Go 中没有泛型,您必须为每种 return 类型创建不同的 reducer 方法,这可能非常不切实际。
我有一个数组:
const assets = [{
type: 'X',
value: 322.12
}, {
type: 'X',
value: 413.21
}]
我想要值的总和 (735,33)
在node.js中我可以使用:const sum = assets.reduce((s, val) => ( s = s + val.value), 0)
我如何在 Go 中做同样的事情?
我会去 Modf()
i = 0
f = 0
for _, asset := range assets {
integer, frac := Modf(asset.value)
i += integer
f += math.Round(frac*100)/100))
}
fmt.Println(i, f)
Here 是一个不完整的实现,但它让您了解为什么这是一个坏主意和非惯用的 Go:
package main
import "fmt"
type Array []int
type ReducerFn func(prev int, next int) int
func (arr Array) Reduce(fn ReducerFn, i int) int {
prev := i
for _, v := range arr {
prev = fn(prev, v)
}
return prev
}
func main() {
i := Array([]int{1,2,4})
fmt.Println(i.Reduce(func(prev int, next int) int {
return prev + next
}, 10))
}
由于 Go 中没有泛型,您必须为每种 return 类型创建不同的 reducer 方法,这可能非常不切实际。