dart:core
庫中Iterable
類的用法介紹如下。
可以按順序訪問的值集合或 "elements"。
通過使用iterator getter 獲取Iterator 並使用它來逐步遍曆值來訪問可迭代的元素。通過調用 Iterator.moveNext 來完成迭代器的步進,如果調用返回 true
,則迭代器現在已移動到下一個元素,該元素隨後可用作 Iterator.current 。如果調用返回 false
,則沒有更多元素。僅當最近對 Iterator.moveNext 的調用返回 true
時,才必須使用 Iterator.current 值。如果在迭代器上第一次調用 Iterator.moveNext 之前使用它,或者在調用返回 false 或拋出錯誤之後,讀取 Iterator.current 可能會拋出或返回任意值。
您可以從同一個 Iterable
創建多個迭代器。每次讀取iterator
時,它都會返回一個新的迭代器,並且可以獨立地單步執行不同的迭代器,每個迭代器都可以訪問可迭代對象的所有元素。相同可迭代should
的迭代器以相同的順序提供相同的值(除非在迭代之間修改了底層集合,某些集合允許這樣做)。
您還可以使用 for-in 循環構造迭代 Iterable
的元素,該循環構造在幕後使用 iterator
getter。例如,您可以迭代 Map 的所有鍵,因為 Map
鍵是可迭代的。
var kidsBooks = {'Matilda': 'Roald Dahl',
'Green Eggs and Ham': 'Dr Seuss',
'Where the Wild Things Are': 'Maurice Sendak'};
for (var book in kidsBooks.keys) {
print('$book was written by ${kidsBooks[book]}');
}
List 和 Set 類都是 Iterable
,就像 dart:collection
庫中的大多數類一樣。
可以修改一些Iterable 集合。向 List
或 Set
添加元素將更改其包含的元素,向 Map
添加新鍵會更改 Map.keys 的元素。更改後創建的迭代器將提供新元素,並且可能會或可能不會保留現有元素的順序(例如,HashSet 可能會在添加單個元素時完全改變其順序)。
更改正在迭代的集合while
通常是允許的not
。這樣做會中斷迭代,這通常通過在下次調用 Iterator.moveNext 時拋出 ConcurrentModificationError 來表示。 Iterator.current getter 的當前值不應受到集合更改的影響,current
值是由先前對 Iterator.moveNext 的調用設置的。
一些可迭代對象在每次迭代時都會動態計算其元素,例如 Iterable.generate 返回的元素或 sync*
生成器函數返回的可迭代對象。如果計算不依賴於其他可能發生變化的對象,那麽每次迭代生成的序列都應該是相同的。
Iterable
的成員,除了 iterator
本身之外,通過查看可迭代的元素來工作。這可以通過運行 iterator 來實現,但某些類可能有更有效的方法來查找結果(例如 List 上的 last 或 length ,或 Set 上的 contains )。
返回另一個 Iterable
(如 map 和 where )的方法都是 lazy
- 每次迭代返回的可迭代對象時,它們都會迭代原始的(根據需要),而不是之前。
由於一個可迭代對象可能被多次迭代,因此不建議在迭代器中使用可檢測的side-effects。對於像 map 和 where 這樣的方法,返回的迭代將在每次迭代時執行參數函數,因此這些函數也不應該有副作用。
- 實施者
-
DoubleLinkedQueue > IterableBase > IterableMixin > LinkedList > List > ListQueue > Queue > Runes > Set
- 可用的擴展
相關用法
- Dart Iterable.takeWhile用法及代碼示例
- Dart IterableMixin.isNotEmpty用法及代碼示例
- Dart IterableMixin.firstWhere用法及代碼示例
- Dart IterableMixin.lastWhere用法及代碼示例
- Dart Iterable.skipWhile用法及代碼示例
- Dart IterableMixin.every用法及代碼示例
- Dart Iterable.toSet用法及代碼示例
- Dart Iterable.singleWhere用法及代碼示例
- Dart Iterable.reduce用法及代碼示例
- Dart Iterable.elementAt用法及代碼示例
- Dart Iterable.where用法及代碼示例
- Dart IterableMixin.take用法及代碼示例
- Dart Iterable.lastWhere用法及代碼示例
- Dart IterableMixin.any用法及代碼示例
- Dart Iterable.contains用法及代碼示例
- Dart IterableMixin.skipWhile用法及代碼示例
- Dart IterableMixin.reduce用法及代碼示例
- Dart Iterable.expand用法及代碼示例
- Dart IterableMixin.elementAt用法及代碼示例
- Dart IterableMixin.forEach用法及代碼示例
- Dart IterableMixin.toList用法及代碼示例
- Dart IterableMixin.map用法及代碼示例
- Dart IterableMixin.join用法及代碼示例
- Dart IterableMixin.followedBy用法及代碼示例
- Dart IterableMixin.isEmpty用法及代碼示例
注:本文由純淨天空篩選整理自dart.dev大神的英文原創作品 Iterable<E> class。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。