Map

Последнее обновление: 06.04.2023

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

Для создания объекта Map могут использоваться фигурные скобки {}. Например, создание пустого словаря:

Map<int, String> map = {};

Класс Map типизируется двумя типами. Первый тип представляет тип ключей, а второй - тип значений. То есть в примере выше ключи представляют значения типа int, а значения - тип String.

Альтернативное определение пустого словаря:

var map = <int, String>{};

Также можно создать пустой словарь следующим образом:

var map = {};

В этом случае создается словарь типа Map<dynamic, dynamic>.

Четвертый способ создания пустого словаря представляет использование конструктора Map:

var map = Map();

Инициализация словаря

Можно сразу инициализировать объект Map значениями. Для этого в фигурных скобках через запятую определяются элементв в формате ключ : значение:

var map = {
		1: "Tom",
		2: "Bob",
		3: "Sam"
};

В данном случае объект map имеют тип Map<int, String> - в качестве типа ключей используется тип int, а в качестве типа значений - тип String. А в самом словаре есть три ключа - 1, 2, 3, с которыми сопоставляются три значения - строки "Tom", "Bob", "Sam".

Функция print позволяет удобным образом вывести содержимое словаря на консоль:

void main (){
    var map = {
		1: "Tom",
		2: "Bob",
		3: "Sam"
    };
    print(map); // {1: Tom, 2: Bob, 3: Sam}
}

Стоит отметить, что все ключи должны быть уникальными. Если вдруг мы определим в словаре (или добавим в словарь) элемент с уже имеющимся ключом, то он просто затрет ранее существовавшее значение:

void main (){
    var map = {
		1: "Tom",
		2: "Bob",
		3: "Sam",
        1: "Alice"
    };
    print(map); // {1: Alice, 2: Bob, 3: Sam}
}

Обращение к элементам

Используя ключи, мы можем получить или изменить значения элементов:

void main (){
	
	var map = { 1: "Tom", 2: "Bob", 3: "Sam" };
    var second = map[2];    // получим значение элемента с ключом 2
    print(second);          // Bob

	map[1] = "Tomas";	    // изменим значение элемента с ключом 1
	print(map);		        // {1: Tomas, 2: Bob, 3: Sam}
}

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

var second = map[2];

Изменение значения элемента с ключом 1:

map[1] = "Tomas";

Свойства и методы Map

Основные свойства:

  • entries: возвращает объект Iterable<MapEntry<K, V>>, который представляет все элементы Map. Каждый отдельный элемент словаря представляет объект MapEntry

  • keys: возвращает объект Iterable<K>, который представляет все ключи Map

  • values: возвращает объект Iterable<V>, который представляет все значения Map

  • length: возвращает количество элементов в Map

  • isEmpty: возвращает true, если Map пуст

  • isNotEmpty: возвращает true, если Map имеет элементы

Использование свойств:

void main (){
	
	var map = { 1: "Tom", 2: "Bob", 3: "Sam" };
    print("Length: ${map.length}"); // Length: 3
    print("Empty: ${map.isEmpty}"); // Empty: false
	print(map.entries);     // (MapEntry(1: Tom), MapEntry(2: Bob), MapEntry(3: Sam))
	print(map.keys);        // (1, 2, 3)
	print(map.values);      // (Tom, Bob, Sam)
}

Основные методы Map

  • addAll(Map<K, V> other): добавляет в Map другой объект Map

  • addEntries(Iterable<MapEntry<K, V>> newEntries): добавляет в Map коллекцию Iterable<MapEntry<K, V>>

  • clear(): удаляет все элементы из Map

  • containsKey(Object key): возвращает true, если Map содержит ключ key

  • containsValue(Object value): возвращает true, если Map содержит значение value

  • forEach(): перебирает все элементы и для каждого из них вызывает определенную функцию

  • V putIfAbsent(K key, V ifAbsent()): если ключ key есть в Map, то возвращает значение по этому ключу. Если ключ отсутствует, то добавляет в Map значение, которое возвращается функцией isAbsent.

  • remove(Object key): удаляет из Map элемент с ключом key

Перебор Map

Для перебора объекта Map можно применять цикл for-in. Мы можем использовать свойства entries, keys, values и перебрать соответственно элементы, ключи и значения.

Стоит отметить, что каждый элемент в Map фактически представляет объект MapEntry<K, V>, где K - тип ключей, а V - тип значений. У этого типа есть два свойства: key (ключ элемента) и value (хранит значение элемента). Используя эти свойства, мы можем получить содержимое элементов в Map. Например, переберем все элементы и отдельно все ключи и значения Map:

void main (){
	
	var map = { 1: "Tom", 2: "Bob", 3: "Sam" };

    for(final element in map.entries){
        print(element.key);     // получаем ключ элемента
        print(element.value);     // получаем значение элемента
    }
}

Подобным образом перебирем по отдельности ключи и значения:

void main (){
	
	var map = { 1: "Tom", 2: "Bob", 3: "Sam" };

    // перебираем ключи
    for(final key in map.keys){
        print(key);
    }

    // перебираем значения
    for(final value in map.values){
        print(value);
    }
}

В качестве альтернативы можно применять метод forEach(). Он принимает функцию, в которую передается ключ и значение каждого элемента словаря:

void main (){
	
	var map = { 1: "Tom", 2: "Bob", 3: "Sam" };

    map.forEach((key, value) => print("$key - $value"));
}

В данном случае в метод forEach передаем анонимную функцию, которая принимает два параметра - ключ и значение элемента и выводит их на консоль. Консольный вывод:

1 - Tom
2 - Bob
3 - Sam

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

Для добавления нового элемента достаточно установить элемент по ранее не существовавшему ключу:

void main (){
	
	var map = { 1: "Tom", 2: "Bob", 3: "Sam" };
    map[4] = "Alice";   // добавляем элемент с ключом 4
    print(map);     // {1: Tom, 2: Bob, 3: Sam, 4: Alice}
}

В данном случае элемента с ключом 4 изначально нет в map. Поэтому установка значения по этому ключу приведет к добавлению нового элемента.

Метод addAll() применяется для добавления элементов из другого словаря, который передается в качестве параметра:

void main (){
	
    var women = {4: "Kate", 5: "Alice"};
	var map = { 1: "Tom", 2: "Bob", 3: "Sam" };
    map.addAll(women); // добавляем словарь women
    print(map);     // {1: Tom, 2: Bob, 3: Sam, 4: Kate, 5: Alice}
}

Удаление

Для удаления применяется метод remove(), в который передается ключ удаляемого элемента:

void main (){
	var map ={ 1: "Tom", 2: "Bob", 3: "Sam" };
    map.remove(2);   // удаляем элемент с ключом 2
    print(map);     // {1: Tom, 3: Sam}
}

Проверка наличия элемента

С помощью методов containsKey() и containsValue() можно соответственно проверить наличие определенного ключа и значения в Map:

void main (){
	var map ={ 1: "Tom", 2: "Bob", 3: "Sam" };
    print(map.containsKey(2));          // true
    print(map.containsKey(4));          // false
    print(map.containsValue("Sam"));    // true
    print(map.containsValue("Tim"));    // false
}
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850