Изучаем Golang. Урок №18. Мапы (maps)

preview_player
Показать описание
В данном видео мы продолжаем изучать язык Go (Golang). Мы изучим мапы (maps): поймем как их правильно создавать, работать с их значениями, итерироваться по ним, а также некоторые полезные usecases

0:00 Содержание
0:20 Что такое мапы (maps)
1:28 Создание мапы с дефолтным значением
2:37 Создание мапы через make
3:34 Создание мапы с помощью литерала
4:40 Создание мапы через new
6:04 Вставка и обновление значений
7:45 Получение значений мапы
10:45 Удаление значений мапы
11:25 Итерация по мапе
13:35 Мапа как список уникальных значений (Set)
16:25 Поиск элемента за константное время
20:17 Мы сделали это
Рекомендации по теме
Комментарии
Автор

Спасибо. Быстро и в то же время толково подаешь материал. Молоток )

vitaliikaverin
Автор

подписался, лайк поставил = лайфхак, по использованию мапы отличный ! (как раз был вопрос, как лучше этот инструмент применять)

andreichemeris
Автор

Привет! Во-первых, цикл видео - огонь! Спасибо!

Но внесу немного полезной критики :)

19:55
"Если нам надо найти 10 пользователей, то нам придется итерироваться 10 раз по слайсу, если же мы используем мапу - то мы итерируемся только один раз, превращая мапу в слайс."

На самом деле, поиск по массиву - всегда итерация, и всегда только одна, от первого элемента к последнему. И найдя элемент - мы завершаем итерацию. Сложность алгоритма - от O(1) (если элемент первый) до O(n) (если элемент последний). Не происходит десяти итераций :)

А в поиске по мапе - вообще нет итерации. Потому что хипа/ хэш-таблица, мапа, сама по себе всегда гарантирует поиск O(1) из-за того, что ячейка памяти лежит в ключе самой мапы. Вот так вот. Еще раз спасибо за твои видосы!

alexispell
Автор

Спасибо. Можешь примеры показать с использованием: map[int]bool или map[string]bool

Автор

вы показали вставку значений в количестве 1 шт. можно ли в маппу вставлять (добавлять) несколько значенй с помощью оператора "for"? если да, покажите как это делается на примерах.

Автор

У меня почему то когда я пишу %T или %#v они не подсвечиваются оранжевым и не выдают нужные значения. Так и печатают %T и %#v. Как пофиксить?

sanchosplay
Автор

Где-то читал что в мапе 0(n) - работает как-то сверхбыстро - это так?

sergeykosovsky
Автор

То есть, ты считаешь, что взятие элемента по индексу в мапе - это одна операция? )) Что-то мне подсказывает, что под капотом там как раз и происходит перебор массива в цикле. Чудес не бывает!

igor-grudinin
Автор

какой смысл в указывании вместимости map? Добавил 2 значения, длина Len 2. Сделал 3, потом 4 человека - Len поменялось на 3, 4. Никаких ограничений или ошибок не выдает. Будто нет значения 3 в map2
map2 := make(map[string]string, 3)
fmt.Printf("Type: %T, Value: %#v, Len: %v\n", map2, map2, len(map2))

map2 = map[string]string{"1": "Kolya", "2": "Vasya" /*, "3": "Igor", "4": "Vitalya"*/}
fmt.Printf("Type: %T, Value: %#v, Len: %v\n", map2, map2, len(map2))

Type: map[string]string, Value: map[string]string{}, Len: 0
Type: map[string]string, Value: map[string]string{"1":"Kolya", "2":"Vasya"}, Len: 2

vitaliikaverin