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


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。