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

Что такое Map в Dart

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

Создание Map

Чтобы создать Map в Dart, вы можете использовать встроенный конструктор Map или синтаксис map literal. Вот пример:

// Использование Map конструктора
var myMap = Map();

// Использование literal syntax
var myMap = {'key1': 'value1', 'key2': 'value2'};

В первом примере мы создаем пустую карту с помощью конструктора Map. Во втором примере мы используем синтаксис map literal для создания карты с двумя парами ключ-значение: ‘key1’: ‘value1’ и ‘key2’: ‘value2’.

Добавление и удаление элементов в Map

Чтобы добавить элемент на карту, вы можете использовать оператор []. Чтобы удалить элемент с карты, вы можете использовать метод remove(). Вот пример:

var myMap = {'key1': 'value1', 'key2': 'value2'};
myMap['key3'] = 'value3'; // Добавляем ключ-значение в Map
myMap.remove('key2'); // Удаляем ключ-значение в Map

В этом примере мы добавляем новую пару ключ-значение к карте с помощью оператора [] и удаляем пару ключ-значение с ключом ‘key2’ с помощью метода remove().

Доступ к элементам в Map

Чтобы получить доступ к элементу на карте, вы можете использовать оператор [] с ключом. Вот пример:

var myMap = {'key1': 'value1', 'key2': 'value2'};
print(myMap['key1']); // Получим: value1

В этом примере мы используем оператор [] для доступа к значению, связанному с ключом ‘key1’ на карте. Результатом выполнения инструкции print будет ‘value1’.

Перебор по Map

Чтобы выполнить итерацию по карте в Dart, вы можете использовать метод forEach(). Вот пример:

var myMap = {'key1': 'value1', 'key2': 'value2'};

myMap.forEach((key, value) {
  print('$key: $value');
});

В этом примере мы используем метод forEach() для перебора пар ключ-значение в карте. Оператор print внутри метода forEach() выведет:

key1: value1
key2: value2

Преобразование Map в List

Иногда вам может понадобиться преобразовать Map в List в Dart. Вы можете сделать это, используя свойство entries, которое возвращает итерацию объектов MapEntry. Каждый объект MapEntry содержит пару ключ-значение из карты. Вот пример:

var myMap = {'key1': 'value1', 'key2': 'value2'};

var myList = myMap.entries.toList();
print(myList);

В этом примере мы используем свойство entries, чтобы получить итерацию объектов MapEntry, а затем с помощью метода ToList() преобразуем итерацию в список. Результатом выполнения инструкции print будет:

[{key: key1, value: value1}, {key: key2, value: value2}]

Фильтрация Map

Вы можете отфильтровать Map в Dart, используя метод where(), который возвращает новую карту, содержащую только пары ключ-значение, удовлетворяющие заданному условию. Вот пример:

var myMap = {'key1': 1, 'key2': 2, 'key3': 3, 'key4': 4};
var filteredMap = myMap.where((key, value) => value % 2 == 0);
print(filteredMap);

В этом примере мы используем метод where() для создания новой карты, содержащей только пары ключ-значение, где значение четное. Результатом выполнения инструкции печати будет:

{key2: 2, key4: 4}

Объединение Map

В Dart вы можете объединять Map с помощью оператора распространения . Оператор spread позволяет вам развернуть содержимое карты или выполнить итерацию на другой карте.

Вот пример объединения двух карт:

Map<String, dynamic> map1 = {'a': 1, 'b': 2};
Map<String, dynamic> map2 = {'c': 3, 'd': 4};
Map<String, dynamic> mergedMap = {...map1, ...map2};

print(mergedMap); // Output: {a: 1, b: 2, c: 3, d: 4}

В приведенном выше примере мы сначала определяем две карты map1 и map2. Затем мы создаем новую карту mergedMap, используя оператор spread, чтобы развернуть содержимое map1 и map2 в новую карту.

Обратите внимание, что если есть ключи, которые существуют на обеих картах, будет использоваться значение ключа на последней карте. Например:

Map<String, dynamic> map1 = {'a': 1, 'b': 2};
Map<String, dynamic> map2 = {'b': 3, 'c': 4};
Map<String, dynamic> mergedMap = {...map1, ...map2};

print(mergedMap); // Output: {a: 1, b: 3, c: 4}

В этом примере значение ключа ‘b’ в map2 перезаписывает значение того же ключа в map1.

Когда используют Map

Map полезен в ситуациях, когда вам необходимо сохранить набор пар ключ-значение, таких как словарь или файл конфигурации. Они также могут использоваться для хранения связанных данных структурированным образом, где ключи выступают в качестве меток для значений.

Заключение

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

 

Комментарии

0

Без регистрации и смс