dart:core
庫中List
類的用法介紹如下。
具有長度的可索引對象集合。
此類的子類實現不同種類的列表。最常見的列表類型是:
-
定長列表
嘗試使用可以更改列表長度的操作時發生錯誤。
-
可增長列表
此類中定義的 API 的完整實現。
[]
創建的默認可增長列表保留一個內部緩衝區,並在必要時增長該緩衝區。這保證了一係列add 操作將在攤銷的常數時間內執行。直接設置長度可能會花費與新長度成正比的時間,並且可能會改變內部容量,因此隨後的添加操作將需要立即增加緩衝區容量。其他列表實現可能具有不同的性能行為。
定長列表示例:
final fixedLengthList = List<int>.filled(5, 0); // Creates fixed-length list.
print(fixedLengthList); // [0, 0, 0, 0, 0]
fixedLengthList[0] = 87;
fixedLengthList.setAll(1, [1, 2, 3]);
print(fixedLengthList); // [87, 1, 2, 3, 0]
// Fixed length list length can't be changed or increased
fixedLengthList.length = 0; // Throws
fixedLengthList.add(499); // Throws
可增長列表示例:
final growableList = <String>['A', 'B']; // Creates growable list.
要將數據添加到可增長列表,請使用 operator[]= 、 add 或 addAll 。
growableList[0] = 'G';
print(growableList); // [G, B]
growableList.add('X');
growableList.addAll({'C', 'B'});
print(growableList); // [G, B, X, C, B]
要檢查元素是否以及在列表中的位置,請使用 indexOf 或 lastIndexOf 。
final indexA = growableList.indexOf('A'); // -1 (not in the list)
final firstIndexB = growableList.indexOf('B'); // 1
final lastIndexB = growableList.lastIndexOf('B'); // 4
要從可增長列表中刪除元素,請使用 remove 、 removeAt 、 removeLast 、 removeRange 或 removeWhere 。
growableList.remove('C');
growableList.removeLast();
print(growableList); // [G, B, X]
要在列表中的位置插入元素,請使用 insert 或 insertAll 。
growableList.insert(1, 'New');
print(growableList); // [G, New, B, X]
要替換列表中的一係列元素,請使用 fillRange 、 replaceRange 或 setRange 。
growableList.replaceRange(0, 2, ['AB', 'A']);
print(growableList); // [AB, A, B, X]
growableList.fillRange(2, 4, 'F');
print(growableList); // [AB, A, F, F]
要對列表的元素進行排序,請使用 sort 。
growableList.sort((a, b) => a.compareTo(b));
print(growableList); // [A, AB, F, F]
要隨機打亂此列表的元素,請使用 shuffle 。
growableList.shuffle();
print(growableList); // e.g. [AB, F, A, F]
要找到滿足某個謂詞的第一個元素,或者如果沒有,則給出默認值,請使用 firstWhere 。
bool isVowel(String char) => char.length == 1 && "AEIOU".contains(char);
final firstVowel = growableList.firstWhere(isVowel, orElse: () => ''); // ''
有類似的lastWhere 和singleWhere 方法。
列表是 Iterable 並支持其所有方法,包括 where 、 map 、 whereType 和 toList 。
列表是 Iterable 。迭代按索引順序對值進行。更改值不會影響迭代,但更改有效索引(即更改列表的長度)在迭代步驟之間會導致 ConcurrentModificationError 。這意味著隻有可增長的列表才能拋出 ConcurrentModificationError。如果長度臨時更改並在繼續迭代之前恢複,則迭代器可能無法檢測到它。
通常不允許在對列表執行操作時修改列表的長度(添加或刪除元素),例如在調用 forEach 或 sort 期間。在迭代時更改列表的長度,無論是通過直接迭代還是通過迭代由列表支持的Iterable,都會中斷迭代。
- 實現的類型
-
Iterable<
T> - 實施者
-
DomRectList > DomStringList > FileList > Float32List > Float32x4List > Float64List > Float64x2List > HtmlCollection > ImmutableListMixin > Int8List > Int16List > Int32List > Int32x4List > Int64List > LengthList > ListMixin > MimeTypeArray > NodeList > NumberList > PluginArray > SourceBufferList > SpeechGrammarList > StringList > TextTrackCueList > TextTrackList > TouchList > TransformList > Uint8ClampedList > Uint8List > Uint16List > Uint32List > Uint64List > UnmodifiableFloat32ListView > UnmodifiableFloat32x4ListView > UnmodifiableFloat64ListView > UnmodifiableFloat64x2ListView > UnmodifiableInt8ListView > UnmodifiableInt16ListView > UnmodifiableInt32ListView > UnmodifiableInt32x4ListView > UnmodifiableInt64ListView > UnmodifiableListView > UnmodifiableUint8ClampedListView > UnmodifiableUint8ListView > UnmodifiableUint16ListView > UnmodifiableUint32ListView > UnmodifiableUint64ListView
- 可用的擴展
相關用法
- Dart ListMixin.expand用法及代碼示例
- Dart List.first用法及代碼示例
- Dart List.sort用法及代碼示例
- Dart ListMixin.contains用法及代碼示例
- Dart ListQueue.of用法及代碼示例
- Dart ListQueue.contains用法及代碼示例
- Dart ListMixin.join用法及代碼示例
- Dart ListMixin.setAll用法及代碼示例
- Dart ListMixin.where用法及代碼示例
- Dart List.fillRange用法及代碼示例
- Dart ListQueue.lastWhere用法及代碼示例
- Dart ListMixin.toList用法及代碼示例
- Dart ListMixin.lastIndexOf用法及代碼示例
- Dart List構造函數用法及代碼示例
- Dart List.addAll用法及代碼示例
- Dart List.indexOf用法及代碼示例
- Dart ListQueue.firstWhere用法及代碼示例
- Dart ListQueue.join用法及代碼示例
- Dart List.removeWhere用法及代碼示例
- Dart ListQueue.from用法及代碼示例
- Dart ListQueue.fold用法及代碼示例
- Dart List.reversed用法及代碼示例
- Dart List.removeRange用法及代碼示例
- Dart ListQueue.take用法及代碼示例
- Dart ListQueue.reduce用法及代碼示例
注:本文由純淨天空篩選整理自dart.dev大神的英文原創作品 List<E> class。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。