Golang:在地图中设置和顺序递增值的实用方法?

时间:2017-01-25 12:23:01

标签: dictionary go

package main

import (
    "fmt"
)

var store = map[string]int{}

func breadArrived(num int) {
    if breadTotal, ok := store["bread"]; ok {
        breadTotal += num
    } else {
        store["bread"] = num
    }
    fmt.Printf("%v\n", store)
}

func main() {
    breadArrived(1)
    breadArrived(2)
    breadArrived(3)
}

上面的代码会忽略+=运算符,因此store["bread"]始终等于1。我假设我错过了像#34;通过引用"这里。还有,还有更方便的方法吗?

感谢。

3 个答案:

答案 0 :(得分:5)

您只是递增breadTotal局部变量,而不是store地图中的值。它应该是:

store["bread"] = breadTotal + num

您也可以这样做:

store["bread"] += num

此外,由于索引地图会返回地图中尚未存在的键的值类型的zero valueint的零值为0 - 正确告诉没有面包) ,if完全没必要。你可以这样做:

func breadArrived(num int) {
    store["bread"] += num
    fmt.Printf("%v\n", store)
}

输出(在Go Playground上尝试):

map[bread:1]
map[bread:3]
map[bread:6]

答案 1 :(得分:2)

breadTotal变量只是map整数值的副本,您需要将其引用为store["bread"] += num以增加map整数值。

https://play.golang.org/p/LQzrbSZudH

package main

import (
    "fmt"
)

var store = map[string]int{}

func breadArrived(num int) {
    store["bread"] += num
    fmt.Printf("%v\n", store)
}

func main() {
    breadArrived(1)
    breadArrived(2)
    breadArrived(3)
}

顺便说一下,map整数的第一次递增是有效的,因为go将所有内容初始化为默认值,对于整数,默认值为0

答案 2 :(得分:-1)

简单的增量,例如C \ C ++样式:

package main

import (
    "fmt"
)

var store = map[string]int{}

func main() {
    store["some_key"] = 0
    if _, found:= store["some_key"]; found{
        fmt.Println(store["some_key"])
        store["some_key"]++
        fmt.Println(store["some_key"])
    }
}

https://play.golang.org/p/nyM7GFI1-GW