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


Dart LinkedHashMap用法及代碼示例


dart:collection 庫中LinkedHashMap 類的用法介紹如下。

帶有預期 constant-time 查找的 insertion-ordered Map

非常量映射文字,如 {"a": 42, "b": 7} ,是 LinkedHashMap

keysvaluesentries 以 key 插入順序進行迭代。

該映射使用 hash-table 來查找條目,因此鍵必須具有 Object.operator==Object.hashCode 的合適實現。如果哈希碼不是well-distributed,則映射操作的性能可能會受到影響。

記住鍵的插入順序,並按照插入映射的順序對鍵進行迭代。值和條目按其對應鍵的順序迭代。更改鍵的值,當鍵已經在映射中時,不會更改迭代順序,但刪除鍵並再次添加它將使其成為迭代順序中的最後一個。

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

LinkedHashMap 的鍵必須具有一致的 Object.==Object.hashCode 實現。這意味著 == 運算符必須在鍵上定義穩定的等價關係(自反、對稱、傳遞和隨時間一致),並且對於被 == 視為相等的對象,hashCode 必須相同。

例子:

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

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

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

要檢查Map是否為空,請使用 isEmptyisNotEmpty 。要查找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 方法為映射的每個鍵/值條目調用一個函數。

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

要檢查映射是否具有具有特定值的條目,請使用 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}

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

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>

相關用法


注:本文由純淨天空篩選整理自dart.dev大神的英文原創作品 LinkedHashMap<K, V> class。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。