Глава 12 — Карты

Карты (словари, хеш-карты). Инициализировать карту можно буквально или с помощью функции make.

  // maps a string to an int
  m := make(map[string]int)
  n := map[string]int{"foo": 1, "bar": 2}

Мы получаем доступ к карте (с помощью ключа) и вставляем/обновляем значения, как показано ниже:

m["k1"] = 7

Мы можем удалить ключ методом delete.

delete(m, "key1")

Мы можем получить размер карты, используя метод len, то есть len(m).

Если мы обращаемся к несуществующему ключу, Go возвращает обнуленное значение. Есть 3 возможности, когда мы обращаемся к карте:

  • Ключ существует
  • Ключ не существует
  • Ключ существует с нулевым значением или Ключ не существует, и поэтому возвращается обнуленное значение (неоднозначно)

Чтобы избежать двусмысленности в третьем случае, мы используем этот синтаксис: elem , ok := m[key]. Возвращаемая переменная ok является логическим типом, который указывает, присутствовал ли ключ или нет.

В нем нет порядка, итерация по карте не гарантирует какого-либо определенного порядка.

При передаче карт функции передается указатель карты. Изменение карты внутри функции изменит исходную карту.

Диапазон работы

Ключевое слово range используется для перебора срезов и карт. Операция диапазона возвращает два значения для каждой итерации: первое — это индекс, а второе — элемент с этим индексом.

  nums := []int{1, 2, 3, 4}
  sum := 0
  // here we have ignored the first return value, the index
  for _, num := range nums {
      sum += num
  }
  kvs := map[string]string{"a": "apple", "b": "banana"}
  for k, v := range kvs {
      fmt.Printf("%s -> %s\n", k, v)
  }

Упражнение!

Создайте карту, выполните итерацию по ней с помощью операции диапазона и распечатайте их на консоли.

Первоначально опубликовано на https://rightfrombasics.com 29 декабря 2018 г.

См. также:  Интересный способ понять программирование
Понравилась статья? Поделиться с друзьями:
IT Шеф
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: