點燈坊

失くすものさえない今が強くなるチャンスよ

Dart 之 List Type

Sam Xiao's Avatar 2024-03-27

Dart 提供 3 種 Collection,List 為其中之一,相當於 JavaScript 的 Array。

Version

Dart 3.3

Mutable List

void main() {
  var list1 = [1, 2, 3];
  var list2 = <int>[1, 2, 3];
  List<int> list3 = [1, 2, 3];
  
  list1.add(4);       // add
  list1[1] = 5;       // edit
  list1.removeAt(1);  // delete
  list1.length = 0;   // delete all
  list1.clear();      // delete all

  print('list1: $list1');
}
  • 可使用 var 的 Type Inference 宣告的 List 為 Mutable List
  • var 亦可在等號右側加上 <int> 限定 Mutable List 內 element 的 type
  • 亦可使用 List <int> 直接宣告 Mutable List 與 element 的 type
  • Mutable List 可自由地 新增修改刪除清空 List 內的 element
  • Dart 亦可使用如 JavaScript 的 .length = 0 清空 List

Immutable List

void main() {
  var list1 = const [1, 2, 3];
  const list2 = [1, 2, 3];
  const list3 = <int>[1, 2, 3];
  const List<int> list4 = [1, 2, 3];

  list1.add(4);      // X add
  list1[0] = 1;      // X edit
  list1.removeAt(1); // X delete
  list1.length = 0;  // X delete all
  list1.clear();     // X delete all

  print('list1: $list1');
}
  • 可加上 const 宣告為 Immutable List
  • Immutable List 無法對 List 內的 element 新增修改刪除清空

Fixed Length List

void main() {
  var list1 = List.filled(3, 0);

  list1.add(4);      // X add
  list1[0] = 1;      // O edit
  list1.removeAt(1); // X delete
  list1.length = 0;  // X delete all
  list1.clear();     // X delete all

  print('list1: $list1');
}
  • Dart 另外提供 filled() 建立 Fixed Length List,可順便提供 初始值
  • Fixed Length List 無法 新增刪除清空 List 的 element,但 可修改

Conclusion

  • Dart 2 可使用 var list1 = new List() 方式建立 List,但 Dart 3 已經廢除
  • Dart 亦可使用如 JavaScript 的 .length = 0 清空 List
  • 在使用上可將 List 當作 JavaScript 的 Array 使用,唯 Dart 還多了 Immutable List 與 Fixed Length List,這些是 JavaScript 所沒有的
  • Immutable List 與 Fixed Length List 的差異在於是否 可修改

Reference

Dart, List