为了账号安全,请及时绑定邮箱和手机立即绑定

Array Reduce 或类似的

Array Reduce 或类似的

Go
慕运维8079593 2022-06-21 10:37:10
我有一个数组: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 中做同样的事情?
查看完整描述

2 回答

?
FFIVE

TA贡献1797条经验 获得超6个赞

这是一个不完整的实现,但它让您了解为什么这是一个坏主意和非惯用的 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 中没有泛型,因此您必须为每种返回类型创建不同的 reducer 方法,这可能非常不切实际。


查看完整回答
反对 回复 2022-06-21
?
米琪卡哇伊

TA贡献1998条经验 获得超6个赞

我会选择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)


查看完整回答
反对 回复 2022-06-21
  • 2 回答
  • 0 关注
  • 119 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信