目錄

Dart 內建支援清單、集合和對應 集合。如需進一步了解如何設定集合所包含的型別,請查看 泛型

清單

#

在幾乎所有程式語言中,最常見的集合可能是陣列,也就是物件的有序群組。在 Dart 中,陣列是 List 物件,因此大多數人只稱它們為清單

Dart 清單文字常數由以逗號分隔的運算式或值清單表示,並以方括號 ([]) 括住。以下是簡單的 Dart 清單

dart
var list = [1, 2, 3];

您可以在 Dart 集合文字常數的最後一個項目後加上逗號。這個尾隨逗號不會影響集合,但可以協助防止複製貼上的錯誤。

dart
var list = [
  'Car',
  'Boat',
  'Plane',
];

清單使用從 0 開始的索引,其中 0 是第一個值的索引,而 list.length - 1 是最後一個值的索引。您可以使用 .length 屬性取得清單的長度,並使用下標運算子 ([]) 存取清單的值

dart
var list = [1, 2, 3];
assert(list.length == 3);
assert(list[1] == 2);

list[1] = 1;
assert(list[1] == 1);

若要建立編譯時期常數的清單,請在清單文字常數之前加上 const

dart
var constantList = const [1, 2, 3];
// constantList[1] = 1; // This line will cause an error.

如需有關清單的詳細資訊,請參閱 dart:core 文件 的清單區段。

集合

#

Dart 中的集合是唯一項目的無序集合。Dart 對集合的支援是由集合文字常數和 Set 類型提供的。

以下是使用集合文字常數建立的簡單 Dart 集合

dart
var halogens = {'fluorine', 'chlorine', 'bromine', 'iodine', 'astatine'};

若要建立空的集合,請使用 {},前面加上類型引數,或將 {} 指定給類型為 Set 的變數

dart
var names = <String>{};
// Set<String> names = {}; // This works, too.
// var names = {}; // Creates a map, not a set.

使用 add()addAll() 方法將項目新增至現有的集合

dart
var elements = <String>{};
elements.add('fluorine');
elements.addAll(halogens);

使用 .length 取得集合中項目的數量

dart
var elements = <String>{};
elements.add('fluorine');
elements.addAll(halogens);
assert(elements.length == 5);

若要建立一個編譯時期常數的集合,請在集合字面值之前加上 const

dart
final constantSet = const {
  'fluorine',
  'chlorine',
  'bromine',
  'iodine',
  'astatine',
};
// constantSet.add('helium'); // This line will cause an error.

如需有關集合的更多資訊,請參閱 dart:core 文件 的集合區段。

對應

#

一般來說,映射是一種將金鑰和值關聯起來的物件。金鑰和值都可以是任何類型的物件。每個 金鑰 只會出現一次,但你可以多次使用相同的 。Dart 對映射的支援是由映射字面值和 Map 類型提供的。

以下是使用映射字面值建立的兩個簡單 Dart 映射

dart
var gifts = {
  // Key:    Value
  'first': 'partridge',
  'second': 'turtledoves',
  'fifth': 'golden rings'
};

var nobleGases = {
  2: 'helium',
  10: 'neon',
  18: 'argon',
};

你可以使用 Map 建構函數建立相同的物件

dart
var gifts = Map<String, String>();
gifts['first'] = 'partridge';
gifts['second'] = 'turtledoves';
gifts['fifth'] = 'golden rings';

var nobleGases = Map<int, String>();
nobleGases[2] = 'helium';
nobleGases[10] = 'neon';
nobleGases[18] = 'argon';

使用下標指派運算子 ([]=) 將新的金鑰值對新增到現有的映射

dart
var gifts = {'first': 'partridge'};
gifts['fourth'] = 'calling birds'; // Add a key-value pair

使用下標運算子 ([]) 從映射中擷取值

dart
var gifts = {'first': 'partridge'};
assert(gifts['first'] == 'partridge');

如果你尋找的映射中不存在金鑰,你會得到 null 回傳

dart
var gifts = {'first': 'partridge'};
assert(gifts['fifth'] == null);

使用 .length 來取得映射中的金鑰值對數量

dart
var gifts = {'first': 'partridge'};
gifts['fourth'] = 'calling birds';
assert(gifts.length == 2);

若要建立一個編譯時期常數的映射,請在映射字面值之前加上 const

dart
final constantMap = const {
  2: 'helium',
  10: 'neon',
  18: 'argon',
};

// constantMap[2] = 'Helium'; // This line will cause an error.

如需有關映射的更多資訊,請參閱 dart:core 文件 的映射區段。

運算子

#

散佈運算子

#

Dart 在清單、映射和集合字面值中支援 展開運算子 (...) 和 null 感知展開運算子 (...?)。展開運算子提供一種簡潔的方式來將多個值插入集合中。

例如,你可以使用展開運算子 (...) 將清單中的所有值插入另一個清單

dart
var list = [1, 2, 3];
var list2 = [0, ...list];
assert(list2.length == 4);

如果展開運算子右邊的表達式可能是 null,你可以使用 null 感知展開運算子 (...?) 來避免例外。

dart
var list2 = [0, ...?list];
assert(list2.length == 1);

如需有關使用展開運算子的更多詳細資訊和範例,請參閱 展開運算子提案

控制流程運算子

#

Dart 提供 集合 if集合 for 以用於清單、映射和集合字面值。你可以使用這些運算子來使用條件式 (if) 和重複 (for) 來建立集合。

以下是使用 集合 if 來建立一個包含三個或四個項目清單的範例

dart
var nav = ['Home', 'Furniture', 'Plants', if (promoActive) 'Outlet'];

Dart 也在集合字面值中支援 if-case

dart
var nav = ['Home', 'Furniture', 'Plants', if (login case 'Manager') 'Inventory'];

以下是使用 集合 for 來處理清單中的項目,然後再將它們新增到另一個清單的範例

dart
var listOfInts = [1, 2, 3];
var listOfStrings = ['#0', for (var i in listOfInts) '#$i'];
assert(listOfStrings[1] == '#1');

有關使用集合 iffor 的更多詳細資料和範例,請參閱 控制流程集合提案