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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。