Como contar itens em um mapa Go?

89

Se eu quiser contar os itens na estrutura do mapa, que declaração devo usar? Tentei usar

for _, _ := range m {...}

mas parece que a sintaxe é falsa.

Shirley
fonte
2
Um pouco fora do tópico, você também pode usar for _ := range m {}, sem necessidade de dois argumentos aqui.
Elazar Leibovich
1
BTW, ambos for _, _ := range m {...}e for _ := range m {}não compilarão b / c do :=, que não pode ser usado com _apenas LHSs. =deve ser usado nestes casos.
zzzz

Respostas:

176

Use len(m). De http://golang.org/ref/spec#Length_and_capacity

len(s)    string type      string length in bytes
          [n]T, *[n]T      array length (== n)
          []T              slice length
          map[K]T          map length (number of defined keys)
          chan T           number of elements queued in channel buffer

Aqui estão alguns exemplos transferidos da documentação do SO agora aposentada:

m := map[string]int{}
len(m) // 0

m["foo"] = 1
len(m) // 1

Se uma variável aponta para um nilmapa, então lenretorna 0.

var m map[string]int
len(m) // 0

Extraído de Maps - Contando elementos do mapa . O autor original foi Simone Carletti . Os detalhes da atribuição podem ser encontrados na página do contribuidor . A fonte está licenciada sob CC BY-SA 3.0 e pode ser encontrada no arquivo de documentação . ID do tópico de referência: 732 e ID do exemplo: 2528.

zzzz
fonte