Go map ++

Submitted by Lizhe on Mon, 08/28/2017 - 17:23

今天发现go的map结构居然可以直接用 ++ 当值... 好神奇

记录一下

package app

import (
    "bufio"
    "fmt"
    "os"
)

func Count(){
    counts := make(map[string]int)
    input := bufio.NewScanner(os.Stdin)
    for input.Scan() {
        if input.Text()=="end"{
            break
        }
        counts[input.Text()]++
    }
    for line, n := range counts {
        if n>1 {
            fmt.Println(n,line)
        }
    }
    fmt.Println("done")
}

 

counts[input.Text()]++ 等于

counts[input.Text()] = counts[input.Text()] + 1

 

然后java为什么不能这么写 go却可以呢

首先java的map只能放对象,不能放基本类型,自动拆装箱也不可以,所以不能放int也就没有加加

其次, java的map如果map.get(key)不存在会直接给出一个null, 所以自然没法加加, go的map如果第一次map[key]不存在,会使用定义的类型(这里是int)的默认值直接初始化(也就是0)