Что такое Map в Dart?

Ответ

Map в Dart — это коллекция, хранящая данные в виде пар ключ-значение. Каждый ключ уникален и используется для доступа к соответствующему значению.

  • Типы: По умолчанию создается LinkedHashMap, сохраняющая порядок вставки. Также есть HashMap (порядок не гарантирован).
  • Изменяемость: Map может быть изменяемым (var map = {};) или неизменяемым (const map = {...};).
  • Типизация: Ключи и значения могут быть любого типа. Рекомендуется использовать явную типизацию для безопасности: Map<String, int> scores = {};

Основные операции и примеры:

// Создание и инициализация Map
Map<String, String> countryCapital = {
  'Япония': 'Токио',
  'Германия': 'Берлин',
};

// Добавление или обновление элемента
countryCapital['Франция'] = 'Париж';

// Получение значения по ключу
String? capital = countryCapital['Германия']; // 'Берлин'
// Важно: оператор [] возвращает nullable тип, если ключ может отсутствовать.

// Проверка наличия ключа
if (countryCapital.containsKey('Италия')) { ... }

// Итерация по Map
countryCapital.forEach((key, value) {
  print('$key: $value');
});

// Преобразование
List<String> countries = countryCapital.keys.toList();
List<String> capitals = countryCapital.values.toList();

Типичное использование в Flutter: хранение конфигураций, кэширование данных, передача аргументов (например, Map<String, dynamic> для ModalRoute.of(context)!.settings.arguments).

Ответ 18+ 🔞

Давай разберем эту штуку, которая в Dart называется Map. Представь себе обычный бумажный словарик, ну, там, где ищешь слово и смотришь его перевод. Вот Map — это такой же цифровой словарик, только вместо «собака» и «dog» там может быть что угодно. Ключ — это слово, которое ищешь, а значение — это то, что на него найдёшь. И ключи, блядь, уникальные, два раза «собаку» не запишешь, иначе пиздец настанет и программа сломается.

Ёпта, есть у них там разные виды этих словарей. По умолчанию тебе подсовывают LinkedHashMap — это такой зануда, который помнит, в каком порядке ты слова закидывал. А есть HashMap — похуист, он слова может перетасовать как бог на душу положит, порядок не гарантирует.

Создать его можно по-разному. Самый простой способ — это фигурные скобки {}. Сделаешь var map = {}; — получишь изменяемый словарь, куда можно пихать и удалять что хочешь. А если сделаешь const map = {...}; — то это уже каменная скрижаль, нихуя не изменишь, только читай.

И вот тут, чувак, очень важный момент. Dart — язык строгий, и если ты не скажешь ему заранее, какие ключи и значения будут, он начнёт подозревать тебя во всяком. Поэтому лучше сразу объявить: Map<String, int> scores = {};. Типа, «слышь, Dart, тут ключи будут строки, а значения — числа, не парь мне мозги». И тогда он тебя не будет доёбывать nullable-типами на ровном месте.

Смотри, как с этим жить:

// Создаём словарик столиц
Map<String, String> countryCapital = {
  'Япония': 'Токио',
  'Германия': 'Берлин',
};

// Хочешь добавить Францию? Да хуйня вопрос!
countryCapital['Франция'] = 'Париж';

// А столицу Германии достать? Легко!
String? capital = countryCapital['Германия']; // Вернёт 'Берлин'
// Видишь этот вопросительный знак? Это потому что ключ может и не найтись. Защита от дурака, ага.

// Чтобы не гадать, есть ли ключ, спроси напрямую
if (countryCapital.containsKey('Италия')) {
  print('Италия есть, но Рим мы тебе не скажем!');
}

// Пройтись по всем записям — тоже не проблема
countryCapital.forEach((key, value) {
  print('Страна $key, а столица там — $value. Запомнил?');
});

// Ну и если вдруг тебе нужны просто списки стран или городов — пожалуйста
List<String> countries = countryCapital.keys.toList(); // Все ключи
List<String> capitals = countryCapital.values.toList(); // Все значения

Где это, блядь, пригождается? Да везде! В Flutter'е это вообще хлеб насущный. Конфиги приложения хранить, данные какого-нибудь пользователя кэшировать, или, что самое частое — аргументы между экранами передавать. Когда ты пишешь ModalRoute.of(context)!.settings.arguments, то это обычно как раз и есть Map<String, dynamic> — универсальная сумка, в которую можно накидать любых данных и переслать. Удобная, блядь, штука, если использовать с умом, а не пихать туда всё подряд, как в помойку.

Видео-ответы