當前位置: 首頁>>編程示例 >>用法及示例精選 >>正文


Dart SplayTreeMap用法及代碼示例

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 []removecontainsKey,可以提供額外的isValidKey 謂詞函數。此函數在對可能不是 K 值的參數值使用 compare 函數之前進行測試。如果省略,isValidKey 函數默認測試值是否為 K

注意:不要在Map上執行操作時修改Map(添加或刪除鍵),例如在 forEachputIfAbsent 調用期間調用的函數中,或在迭代Map時(keysvaluesentries )。

例子:

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

要將數據添加到Map,請使用 operator[]=addAlladdEntries

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

要檢查Map是否為空,請使用 isEmptyisNotEmpty 。要查找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}

要有條件地添加或修改特定鍵的值,具體取決於是否已經存在具有該鍵的條目,請使用 putIfAbsentupdate

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.dev大神的英文原創作品 SplayTreeMap<K, V> class。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。