Spec-Zone.ru › Dart 2

dart:collection

Класс LinkedHashMap<K, V>

Map с порядком вставки и ожидаемым временем поиска, постоянным относительно размера.

Литерал map, не являющийся константой, например {"a": 42, "b": 7}, — это LinkedHashMap.

Итерация по ключам, значениям и записям выполняется в порядке вставки ключей.

Для поиска записей в map используется хеш-таблица, поэтому ключи должны иметь подходящие реализации Object.operator== и Object.hashCode. Если хеш-коды распределены неравномерно, производительность операций с map может снизиться.

Порядок вставки ключей сохраняется, и итерация по ключам выполняется в порядке их добавления в map. Итерация по значениям и записям выполняется в соответствии с порядком соответствующих ключей. Изменение значения ключа, уже находящегося в map, не влияет на порядок итерации, однако удаление ключа с последующим добавлением снова помещает его в конец этого порядка.

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

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

Пример:

final planetsByDiameter = {0.949: 'Venus'}; // A new LinkedHashMap

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

planetsByDiameter[1] = 'Earth';
planetsByDiameter.addAll({0.532: 'Mars', 11.209: 'Jupiter'});

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

print(planetsByDiameter.isEmpty); // false
print(planetsByDiameter.length); // 4
print(planetsByDiameter);
// {0.949: Venus, 1.0: Earth, 0.532: Mars, 11.209: Jupiter}

Метод forEach вызывает функцию для каждой записи «ключ/значение» map.

planetsByDiameter.forEach((key, value) {
  print('$key \t $value');
  // 0.949    Venus
  // 1.0      Earth
  // 0.532    Mars
  // 11.209   Jupiter
});

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

final keyOneExists = planetsByDiameter.containsKey(1); // true
final keyFiveExists = planetsByDiameter.containsKey(5); // false

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

final earthExists = planetsByDiameter.containsValue('Earth'); // true
final saturnExists =  planetsByDiameter.containsValue('Saturn'); // false

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

final removedValue = planetsByDiameter.remove(1);
print(removedValue); // Earth
print(planetsByDiameter); // {0.949: Venus, 0.532: Mars, 11.209: Jupiter}

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

planetsByDiameter.removeWhere((key, value) => key == 0.949);
print(planetsByDiameter); // {0.532: Mars, 11.209: Jupiter}

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

planetsByDiameter.update(0.949, (v) => 'Venus', ifAbsent: () => 'Venus');
planetsByDiameter.putIfAbsent(0.532, () => "Another Mars if needed");
print(planetsByDiameter); // {0.532: Mars, 11.209: Jupiter, 0.949: Venus}

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

planetsByDiameter.updateAll((key, value) => 'X');
print(planetsByDiameter); // {0.532: X, 11.209: X, 0.949: X}

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

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

См. также:

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

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

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

Свойства

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

Методы

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

Операторы

operator ==(Object other) → bool
inherited
Оператор равенства.
operator [](Object? key) → V?
inherited
Значение для заданного key или null, если key отсутствует в map.
operator []=(K key, V value) → void
inherited
Связывает 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/LinkedHashMap-class.html

Spec-Zone.ru

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