dart:collection
庫中SplayTreeMap
類的用法介紹如下。
可以相對於彼此排序的 Map 個對象。
該映射基於self-balancing 二叉樹。它允許大多數 single-entry 操作在攤銷的對數時間內進行。
使用構造函數中傳遞的compare
函數比較映射的鍵,用於排序和相等。如果映射僅包含鍵 a
,則 map.containsKey(b)
將返回 true
當且僅當 compare(a, b) == 0
並且甚至不檢查 a == b
的值。如果省略比較函數,則假定對象為 Comparable ,並使用它們的 Comparable.compareTo 方法進行比較。在這種情況下,不可比較的對象(包括 null
)將不能用作鍵。
要允許使用compare
函數不支持的對象調用operator []、remove 或containsKey,可以提供額外的isValidKey
謂詞函數。此函數在對可能不是 K
值的參數值使用 compare
函數之前進行測試。如果省略,isValidKey
函數默認測試值是否為 K
。
注意:不要在Map上執行操作時修改Map(添加或刪除鍵),例如在 forEach 或 putIfAbsent 調用期間調用的函數中,或在迭代Map時(keys,values 或 entries )。
例子:
final planetsByMass = SplayTreeMap<double, String>((a, b) => a.compareTo(b));
要將數據添加到Map,請使用 operator[]= 、 addAll 或 addEntries 。
planetsByMass[0.06] = 'Mercury';
planetsByMass
.addAll({0.81: 'Venus', 1.0: 'Earth', 0.11: 'Mars', 317.83: 'Jupiter'});
要檢查Map是否為空,請使用 isEmpty 或 isNotEmpty 。要查找Map條目的數量,請使用 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
});
要檢查Map是否有帶有特定鍵的條目,請使用 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}
要刪除所有條目並清空Map,請使用 clear 。
planetsByMass.clear();
print(planetsByMass.isEmpty); // false
print(planetsByMass); // {}
也可以看看:
- Map ,鍵/值對集合的通用接口。
- HashMap 是無序的(不保證迭代的順序)。
- LinkedHashMap 以 key 插入順序進行迭代。
- 混合類型
-
MapMixin<
K, V>
相關用法
- Dart SplayTreeMap.from用法及代碼示例
- Dart SplayTreeMap.containsValue用法及代碼示例
- Dart SplayTreeMap.addAll用法及代碼示例
- Dart SplayTreeMap.fromIterables用法及代碼示例
- Dart SplayTreeMap.fromIterable用法及代碼示例
- Dart SplayTreeMap.clear用法及代碼示例
- Dart SplayTreeMap.forEach用法及代碼示例
- Dart SplayTreeMap.putIfAbsent用法及代碼示例
- Dart SplayTreeMap.remove用法及代碼示例
- Dart SplayTreeMap.containsKey用法及代碼示例
- Dart SplayTreeMap.of用法及代碼示例
- Dart SplayTreeMap.updateAll用法及代碼示例
- Dart SplayTreeMap.update用法及代碼示例
- Dart SplayTreeSet.lookup用法及代碼示例
- Dart SplayTreeSet.isEmpty用法及代碼示例
- Dart SplayTreeSet用法及代碼示例
- Dart SplayTreeSet.addAll用法及代碼示例
- Dart SplayTreeSet.remove用法及代碼示例
- Dart SplayTreeSet.isNotEmpty用法及代碼示例
- Dart SplayTreeSet.retainAll用法及代碼示例
- Dart SplayTreeSet.toSet用法及代碼示例
- Dart SplayTreeSet.clear用法及代碼示例
- Dart SplayTreeSet.removeAll用法及代碼示例
- Dart SplayTreeSet.of用法及代碼示例
- Dart SplayTreeSet.from用法及代碼示例
注:本文由純淨天空篩選整理自dart.dev大神的英文原創作品 SplayTreeMap<K, V> class。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。