Spec-Zone.ru › Dart 2

dart:collection

Класс HashMap<K, V>

Реализация Map на основе хеш-таблицы.

HashMap не упорядочен (порядок итерации не гарантируется).

Ключи HashMap должны иметь согласованные реализации Object.== и Object.hashCode. Это означает, что оператор == должен определять стабильное отношение эквивалентности для ключей (рефлексивное, симметричное, транзитивное и неизменное с течением времени), а hashCode должно быть одинаковым для объектов, которые считаются равными согласно ==.

Итерация по ключам, значениям или записям карты (с помощью forEach) может происходить в любом порядке. Порядок итерации меняется только при изменении карты. Значения перебираются в том же порядке, что и соответствующие им ключи, поэтому параллельная итерация по keys и values позволит получить соответствующие пары ключей и значений.

Обратите внимание: Не изменяйте карту (не добавляйте и не удаляйте ключи), пока выполняется операция над этой картой, например в функциях, вызываемых во время вызова forEach или putIfAbsent, либо во время итерации по карте (keys, values или entries).

Пример:

final Map<int, String> planets = HashMap(); // Is a HashMap

Чтобы добавить данные в карту, используйте operator[]=, addAll или addEntries.

planets[3] = 'Earth';
planets.addAll({4: 'Mars'});
final gasGiants = {6: 'Jupiter', 5: 'Saturn'};
planets.addEntries(gasGiants.entries);
print(planets); // fx {5: Saturn, 6: Jupiter, 3: Earth, 4: Mars}

Чтобы проверить, пуста ли карта, используйте isEmpty или isNotEmpty. Чтобы узнать количество записей в карте, используйте length.

final isEmpty = planets.isEmpty; // false
final length = planets.length; // 4

forEach выполняет итерацию по всем записям карты.

planets.forEach((key, value) {
  print('$key \t $value');
  // 5        Saturn
  // 4        Mars
  // 3        Earth
  // 6        Jupiter
});

Чтобы проверить, содержит ли карта запись с определённым ключом, используйте containsKey.

final keyOneExists = planets.containsKey(4); // true
final keyFiveExists = planets.containsKey(1); // false
```dart continued
To check whether the map has an entry with a specific value,
use [containsValue].
```dart continued
final marsExists = planets.containsValue('Mars'); // true
final venusExists = planets.containsValue('Venus'); // false

Чтобы удалить запись с определённым ключом, используйте remove.

final removeValue = planets.remove(5);
print(removeValue); // Jupiter
print(planets); // fx {4: Mars, 3: Earth, 5: Saturn}

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

planets.removeWhere((key, value) => key == 5);
print(planets); // fx {3: Earth, 4: Mars}

Чтобы условно добавить или изменить значение для определённого ключа в зависимости от того, существует ли уже запись с таким ключом, используйте putIfAbsent или update.

planets.update(4, (v) => 'Saturn');
planets.update(8, (v) => '', ifAbsent: () => 'Neptune');
planets.putIfAbsent(4, () => 'Another Saturn');
print(planets); // fx {4: Saturn, 8: Neptune, 3: Earth}

Чтобы обновить значения для всех ключей на основе существующих ключей и значений, используйте updateAll.

planets.updateAll((key, value) => 'X');
print(planets); // fx {8: X, 3: X, 4: X}

Чтобы удалить все записи и очистить карту, используйте clear.

planets.clear();
print(planets); // {}
print(planets.isEmpty); // true

См. также:

  • Map — общий интерфейс коллекций пар ключ/значение.
  • LinkedHashMap выполняет итерацию в порядке добавления ключей.
  • SplayTreeMap выполняет итерацию по ключам в отсортированном порядке.
Реализуемые типы
  • Map<K, V>

Конструкторы

HashMap({bool equals(K, K)?, int hashCode(K)?, bool isValidKey(dynamic)?})
factory
Создаёт неупорядоченную Map на основе хеш-таблицы.
HashMap.from(Map other)
factory
Создаёт HashMap, содержащую все пары ключ/значение из other.
HashMap.fromEntries(Iterable<MapEntry<K, V>> entries)
factory
Создаёт HashMap, содержащую записи из entries.
HashMap.fromIterable(Iterable iterable, {K key(dynamic element)?, V value(dynamic element)?})
factory
Создаёт HashMap, в которой ключи и значения вычисляются на основе iterable.
HashMap.fromIterables(Iterable<K> keys, Iterable<V> values)
factory
Создаёт HashMap, сопоставляющую заданные keys и values.
HashMap.identity()
factory
Создаёт неупорядоченную карту на основе идентичности объектов.
HashMap.of(Map<K, V> other)
factory
Создаёт HashMap, содержащую все пары ключ/значение из other. Пример:

Свойства

entries → Iterable<MapEntry<K, V>>
только для чтенияунаследовано
Записи карты this.
hashCode → int
только для чтенияунаследовано
Хеш-код этого объекта.
isEmpty → bool
только для чтенияунаследовано
Содержит ли карта хотя бы одну пару ключ/значение.
isNotEmpty → bool
только для чтенияунаследовано
Содержит ли карта хотя бы одну пару ключ/значение.
keys → Iterable<K>
только для чтенияунаследовано
Ключи this.
length → int
только для чтенияунаследовано
Количество пар ключ/значение в карте.
runtimeType → Type
только для чтенияунаследовано
Представление типа объекта во время выполнения.
values → Iterable<V>
только для чтенияунаследовано
Значения this.

Методы

addAll(Map<K, V> other) → void
унаследовано
Добавляет в эту карту все пары ключ/значение из other.
addEntries(Iterable<MapEntry<K, V>> newEntries) → void
унаследовано
Добавляет в эту карту все пары ключ/значение из newEntries.
cast<RK, RV>() → Map<RK, RV>
унаследовано
Предоставляет представление этой карты с ключами типа RK и экземплярами типа RV, при необходимости выполняя преобразование типов.
clear() → void
унаследовано
Удаляет из карты все записи.
containsKey(Object? key) → bool
унаследовано
Содержит ли эта карта указанный key.
containsValue(Object? value) → bool
унаследовано
Содержит ли эта карта указанное value.
forEach(void action(K key, V value)) → void
унаследовано
Применяет action к каждой паре ключ/значение карты.
map<K2, V2>(MapEntry<K2, V2> convert(K key, V value)) → Map<K2, V2>
унаследовано
Возвращает новую карту, в которой все записи этой карты преобразованы с помощью заданной функции convert.
noSuchMethod(Invocation invocation) → dynamic
унаследовано
Вызывается при обращении к несуществующему методу или свойству.
putIfAbsent(K key, V ifAbsent()) → V
унаследовано
Ищет значение key или добавляет новую запись, если её нет.
remove(Object? key) → V?
унаследовано
Удаляет key и связанное с ним значение из карты, если запись существует.
removeWhere(bool test(K key, V value)) → void
унаследовано
Удаляет из этой карты все записи, удовлетворяющие заданному test.
toString() → String
унаследовано
Строковое представление этого объекта.
update(K key, V update(V value), {V ifAbsent()?}) → V
унаследовано
Обновляет значение для указанного key.
updateAll(V update(K key, V value)) → void
унаследовано
Обновляет все значения.

Операторы

operator ==(Object other) → bool
унаследовано
Оператор проверки на равенство.
operator [](Object? key) → V?
унаследовано
Значение для указанного key или null, если key отсутствует в карте.
operator []=(K key, V value) → void
унаследовано
Связывает key с указанным value.

© 2012 the Dart project authors
Licensed under the BSD 3-Clause "New" or "Revised" License.
https://api.dart.dev/stable/2.19.6/dart-collection/HashMap-class.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API