Spec-Zone.ru › Dart 2

dart:collection

класс SplayTreeMap<K, V>

Map объектов, которые можно упорядочить относительно друг друга.

Карта основана на самобалансирующемся бинарном дереве. Большинство операций с одной записью выполняются за амортизированное логарифмическое время.

Ключи карты сравниваются с помощью функции compare, переданной конструктору, как для упорядочивания, так и для проверки на равенство. Если карта содержит только ключ a, то map.containsKey(b) вернёт true тогда и только тогда, когда compare(a, b) == 0, а значение a == b даже не проверяется. Если функция сравнения не указана, предполагается, что объекты реализуют Comparable, и они сравниваются с помощью метода Comparable.compareTo. В этом случае несравнимые объекты (включая null) нельзя использовать в качестве ключей.

Чтобы вызывать operator [], remove или containsKey с объектами, которые не поддерживаются функцией compare, можно передать дополнительную функцию-предикат isValidKey. Эта функция проверяется до применения функции compare к значению аргумента, которое может не быть значением K. Если она не указана, функция isValidKey по умолчанию проверяет, является ли значение значением K.

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

Пример:

final planetsByMass = SplayTreeMap<double, String>((a, b) => a.compareTo(b));

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

planetsByMass[0.06] = 'Mercury';
planetsByMass
    .addAll({0.81: 'Venus', 1.0: 'Earth', 0.11: 'Mars', 317.83: 'Jupiter'});

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

print(planetsByMass.isEmpty); // false
print(planetsByMass.length); // 5

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

planetsByMass.forEach((key, value) {
  print('$key \t $value');
  // 0.06    Mercury
  // 0.11    Mars
  // 0.81    Venus
  // 1.0     Earth
  // 317.83  Jupiter
});

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

final keyOneExists = planetsByMass.containsKey(1.0); // true
final keyFiveExists = planetsByMass.containsKey(5); // false

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

final earthExists = planetsByMass.containsValue('Earth'); // true
final plutoExists = planetsByMass.containsValue('Pluto'); // false

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

final removedValue = planetsByMass.remove(1.0);
print(removedValue); // Earth

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

planetsByMass.removeWhere((key, value) => key <= 1);
print(planetsByMass); // {317.83: Jupiter}

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

planetsByMass.update(1, (v) => '', ifAbsent: () => 'Earth');
planetsByMass.putIfAbsent(317.83, () => 'Another Jupiter');
print(planetsByMass); // {1.0: Earth, 317.83: Jupiter}

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

planetsByMass.updateAll((key, value) => 'X');
print(planetsByMass); // {1.0: X, 317.83: X}

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

planetsByMass.clear();
print(planetsByMass.isEmpty); // false
print(planetsByMass); // {}

См. также:

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

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

SplayTreeMap([int compare(K key1, K key2)?, bool isValidKey(dynamic potentialKey)?])
SplayTreeMap.from(Map other, [int compare(K key1, K key2)?, bool isValidKey(dynamic potentialKey)?])
фабричный
Создаёт SplayTreeMap, содержащую все пары ключ/значение из other.
SplayTreeMap.fromIterable(Iterable iterable, {K key(dynamic element)?, V value(dynamic element)?, int compare(K key1, K key2)?, bool isValidKey(dynamic potentialKey)?})
фабричный
Создаёт SplayTreeMap, ключи и значения которой вычисляются из iterable.
SplayTreeMap.fromIterables(Iterable<K> keys, Iterable<V> values, [int compare(K key1, K key2)?, bool isValidKey(dynamic potentialKey)?])
фабричный
Создаёт SplayTreeMap, сопоставляя заданные keys с values.
SplayTreeMap.of(Map<K, V> other, [int compare(K key1, K key2)?, bool isValidKey(dynamic potentialKey)?])
фабричный
Создаёт SplayTreeMap, содержащую все пары ключ/значение из 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.
firstKey() → K?
Первый ключ карты.
firstKeyAfter(K key) → K?
Возвращает первый ключ карты, строго больший, чем key. Возвращает null, если ключ не найден.
forEach(void f(K key, V value)) → void
переопределено
Применяет action к каждой паре ключ/значение карты.
lastKey() → K?
Последний ключ карты.
lastKeyBefore(K key) → K?
Последний ключ карты, строго меньший, чем key.
map<K2, V2>(MapEntry<K2, V2> transform(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/SplayTreeMap-class.html

Spec-Zone.ru

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