# 列表 List
# 初始
List 是一个有序列表
List l = [1,2,3];
print(l);
[1, 2, 3]
1
2
3
4
5
2
3
4
5
# 声明
# 自动
List<int> l = [];
l..add(1)
..add(2)
..add(3);
print(l);
[1, 2, 3]
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
# 定长
List l = List<int>.filled(3, 0);
l[0] = 1;
l[1] = 2;
l[2] = 3;
// l[3] = 4; 运行时报错,编译前不会提示错误
print(l);
[1, 2, 3]
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
# 生成数据
List l = List.generate(10, (index) => index * index);
print(l);
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
1
2
3
4
5
2
3
4
5
# 常用属性
| 名称 | 说明 |
|---|---|
| isEmpty | 是否为空 |
| isNotEmpty | 是否不为空 |
| first | 第一个 |
| last | 最后一个 |
| length | 长度 |
| reversed | 反转 |
List l = List.generate(10, (index) => index + 1);
print("List: ${l}");
print("isEmpty: ${l.isEmpty}");
print("isNotEmpty: ${l.isNotEmpty}");
print("first: ${l.first}");
print("last: ${l.lastOrNull}");
print("length: ${l.length}");
print("reversed: ${l.reversed}"); // 返回的是一个迭代器(Iterator), 可用 toList() 方法转换成List
List: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
isEmpty: false
isNotEmpty: true
first: 1
last: 10
length: 10
reversed: (10, 9, 8, 7, 6, 5, 4, 3, 2, 1)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 方法
| 名称 | 说明 |
|---|---|
| add | 添加 |
| addAll | 添加多个 |
| insert | 插入 |
| insertAll | 插入多个 |
| indexOf | 查询 |
| indexWhere | 按条件查询 |
| remove | 删除 |
| removeAt | 按位置删除 |
| fillRange | 按区间填充 |
| getRange | 按区间获取 |
| shuffle | 洗牌 |
| sort | 排序 |
| sublist | 创建子列表 |
在 Dart 的标准库中,List 类型提供了 sublist() 方法,而 getRange() 方法则更多地用于 Iterable 类型,尽管对于 List 来说,getRange() 也是可用的。
# 常用方法
# 添加
List<int> l = [];
l..add(1)
..addAll([2, 3, 4, 5]);
print("add: ${l}");
l..insert(5, 6)
..insertAll(6, [7, 8]);
print("insert: ${l}");
add: [1, 2, 3, 4, 5]
insert: [1, 2, 3, 4, 5, 6, 7, 8]
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
# 查询
List l = List.generate(10, (index) => index * 2);
print(l);
print("值等于4的索引: ${l.indexOf(4)}");
print("第一个值大于9的索引: ${l.indexWhere((it) => it > 9)}" );
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
值等于4的索引: 2
第一个值大于9的索引: 5
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
# 删除
List<int> l = [6, 1, 2, 3, 4, 5, 6, 6];
l.remove(6);
print(l);
l.removeAt(5);
print(l);
[1, 2, 3, 4, 5, 6, 6]
[1, 2, 3, 4, 5, 6]
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
# Range
List<int> l = [6, 1, 2, 3, 4, 5, 6, 6];
l.fillRange(0, 3, 9); // 按区间填充
print(l);
print(l.getRange(0, 5)); // 按区间获取
[9, 9, 9, 3, 4, 5, 6, 6]
(9, 9, 9, 3, 4)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
# 洗牌
List<int> l = [6, 1, 2, 3, 4, 5, 6, 6];
l.shuffle();
print(l);
l.shuffle();
print(l);
[2, 5, 4, 6, 6, 3, 1, 6]
[6, 4, 6, 5, 2, 3, 6, 1]
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
# 排序
# 数字
List<int> l = [6, 1, 2, 3, 4, 5, 6, 6];
l.sort();
print(l);
[1, 2, 3, 4, 5, 6, 6, 6]
1
2
3
4
5
6
2
3
4
5
6
# 日期
List<DateTime> dtList = [];
dtList.addAll([
DateTime.now(),
DateTime.now().add(new Duration(days: -12)),
DateTime.now().add(new Duration(days: -2))
]);
print(dtList);
dtList.sort((a, b) => a.compareTo(b));
print(dtList);
[2024-10-13 16:01:36.275228, 2024-10-01 16:01:36.275228, 2024-10-11 16:01:36.276225]
[2024-10-01 16:01:36.275228, 2024-10-11 16:01:36.276225, 2024-10-13 16:01:36.275228]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 复制子列表
List<int> l = [6, 1, 2, 3, 4, 5, 6, 6];
List<int> l2 = l.sublist(1,4);
print(l2);
[1, 2, 3]
1
2
3
4
5
6
2
3
4
5
6
# 操作符
| 名称 | 说明 |
|---|---|
= | 赋值 |
+ | 连接 |
[] | 取值 |
# = 赋值
List<int> l = [1,2,3];
print(l);
[1,2,3]
1
2
3
4
5
2
3
4
5
# + 连接
List<int> l1 = [1,2,3];
List<int> l2 = [4,5,6];
print("${l1 + l2}");
[1, 2, 3, 4, 5, 6]
1
2
3
4
5
6
2
3
4
5
6
# [] 取值
List<int> l = [1,2,3];
print(l[0]);
1
1
2
3
4
5
2
3
4
5