Как подсчитать предметы на карте Go?

89

Если я хочу подсчитать элементы в структуре карты, какой оператор мне следует использовать? Я пытался использовать

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

но кажется, что синтаксис неверен.

Ширли
источник
2
Немного не по теме, вы тоже можете использовать for _ := range m {}, нет необходимости в двух аргументах.
Элазар Лейбович
1
Кстати, оба for _, _ := range m {...}и for _ := range m {}не будут компилировать b / c из :=, что не может использоваться _только с LHS. =вместо этого следует использовать.
zzzz

Ответы:

176

Используйте len(m). С 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

Вот пара примеров, портированных из устаревшей документации SO:

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

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

Если переменная указывает на nilкарту, lenвозвращает 0.

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

Выдержка из Карт - Подсчет элементов карты . Первоначальным автором была Симона Карлетти . Подробную информацию об авторстве можно найти на странице автора . Исходный код находится под лицензией CC BY-SA 3.0 и может быть найден в архиве документации . Ссылка ID темы: 732 и ID примера: 2528.

zzzz
источник