当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Dart List用法及代码示例


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[]=addaddAll

growableList[0] = 'G';
print(growableList); // [G, B]
growableList.add('X');
growableList.addAll({'C', 'B'});
print(growableList); // [G, B, X, C, B]

要检查元素是否以及在列表中的位置,请使用 indexOflastIndexOf

final indexA = growableList.indexOf('A'); // -1 (not in the list)
final firstIndexB = growableList.indexOf('B'); // 1
final lastIndexB = growableList.lastIndexOf('B'); // 4

要从可增长列表中删除元素,请使用 removeremoveAtremoveLastremoveRangeremoveWhere

growableList.remove('C');
growableList.removeLast();
print(growableList); // [G, B, X]

要在列表中的位置插入元素,请使用 insertinsertAll

growableList.insert(1, 'New');
print(growableList); // [G, New, B, X]

要替换列表中的一系列元素,请使用 fillRangereplaceRangesetRange

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: () => ''); // ''

有类似的lastWheresingleWhere 方法。

列表是 Iterable 并支持其所有方法,包括 wheremapwhereTypetoList

列表是 Iterable 。迭代按索引顺序对值进行。更改值不会影响迭代,但更改有效索引(即更改列表的长度)在迭代步骤之间会导致 ConcurrentModificationError 。这意味着只有可增长的列表才能抛出 ConcurrentModificationError。如果长度临时更改并在继续迭代之前恢复,则迭代器可能无法检测到它。

通常不允许在对列表执行操作时修改列表的长度(添加或删除元素),例如在调用 forEachsort 期间。在迭代时更改列表的长度,无论是通过直接迭代还是通过迭代由列表支持的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

可用的扩展

EnumByName

相关用法


注:本文由纯净天空筛选整理自dart.dev大神的英文原创作品 List<E> class。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。