Dart List

2023/6/1

# Dart 数据类型 - List

Dart 中的数组,由 List对象 表示。List 有两种声明方式

  • 字面量方式
    • List list = []; 不限定元素的数据类型
    • List list = <int>[]; 限定元素的数据类型是 int
  • 构造函数方式
    • List list = new List.empty(growable: true); 不限制长度的空列表
    • List list = new List.filled(3, 0); 声明指定长度的填充列表

扩展操作符(...)

  • var list = [1, 2, 3];
  • var list2 = [0, ...list] // [0, 1, 2, 3]
void main() {
  // 声明List - 字面量
  List l1 = ['a', 'b', 'c', 1, 2, 3];
  print(l1);

  List l2 = <int>[1, 2, 3]; // 限定元素类型的声明方式
  print(l2);
  
  // 通过命名构造函数的声明方式
  var l3 = new List.empty(growable: true);
  l3.add(1);
  print(l3);

  var l4 = new List.filled(3, 6);
  print(l4);

  // 扩展操作符
  var l5 = [0, ...l4];
  print(l5);

  var l6;
  var l7 = [7, ...?l6];
  print(l7);

  // 返回列表的长度
  print(l1.length);

  // 列表的反转
  print(l1.reversed.toList());

  // 添加元素
  l3.addAll([4, 5, 6]);
  print(l3);

  // 删除元素
  l3.remove(6);
  print(l3);
  // 根据下标删除元素
  l3.removeAt(1);
  print(l3);

  // 在指定的位置添加元素
  l3.insert(1, 9);
  print(l3);

  // 清空
  l3.clear();
  print(l3.length);
  print(l3.isEmpty);

  // 合并元素
  List words = ['Hello', 'World'];
  print(words.join('-'));
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54

# 遍历 List

  • forEach() 遍历列表
  • map() 遍历并处理元素,然后生成新的列表
  • where() 返回满足条件的元素
  • any() 只要有一项满足条件,即返回 true
  • every() 判断是否每一项都满足条件,都满足条件才返回 true
void main() {
  var nums = [1, 2, 3];

  // for 循环进行遍历
  for (var i = 0; i < nums.length; i++) {
    print(nums[i]);
  }

  // for ... in
  for (var item in nums) {
    print(item);
  }

  // forEach
  nums.forEach((element) { 
    print(element);  
  });

  // var newNums = [];
  // for (var i = 0; i < nums.length; i++) {
  //   newNums.add(nums[i] * nums[i]);
  // }
  // print(newNums);

  // map 循环之后会得到一个处理后的列表
  var newNums = nums.map((e) {
    return e * e;
  });
  print(newNums.toList());

  // where 返回符合条件的元素
  // 判断数字是否是奇数
  bool isOdd(n) => n % 2 == 1;
  var oddNum = nums.where(isOdd);
  print(oddNum.toList());

  // any 来检测是否有奇数(至少有一个)
  print(nums.any(isOdd));

  // every 来判断是否都是奇数
  print(nums.every(isOdd));

  // 扩展
  var pairs = [[1, 2], [3, 4]];
  var flattened = pairs.expand((element) => element).toList();
  print(flattened); // [1, 2, 3, 4]

  // 折叠,对列表中的每一个元素做一个累计操作(对应 js 中的 reduce)
  int result = nums.fold(2, (p, element) => p + element);
  print(result);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51