前言
如果你是刚刚踏入编程世界的新手,可能会好奇:如何在代码中高效管理一组数据?答案就是列表(List) ——它就像现实生活中的“购物清单”或“待办事项表”,能帮你将多个元素有序地组织在一起,轻松完成增删改查等操作。相信你已经开始好奇列表是什么啦?接下来我们将一起从零开始认识Dart列表这把利器。
一、基本概念
1.1、定义
列表(List)也称为有序集合,是集合类型中的一种,其是基于动态数组实现的数据结构,可以存储相同类型或不同类型的元素。每个元素都有固定的位置索引,通过索引可以方便地访问到元素。
如下图所示蓝色部分为列表内容,红色部分为列表内容对应的位置索引。
1.2、特点
- 有序:列表元素是按照位置索引的顺序进行排列。
- 可重复:列表中的元素可以重复,如上图中的数据 2、23 。
1.3、泛型支持
泛型支持是指列表中的元素类型可以声明为动态类型。如上图中的列表元素类型分别为int类型、字符串类型、浮点类型、布尔类型。
二、创建和初始化
2.1、直接创建
使用中括号([])快速创建。
示例:
void main() {
List<int> intList = [2,23,23,54,8,12,2];
List<dynamic> dynamicList = [23,23,'apple',8,'peach',12.5,true];
}
2.2、使用构造函数创建
使用List类的构造函数创建。
List<int>.empty():创建空列表。List<int>.filled(5,1):创建固定长度的列表。
示例:
void main() {
List<int> emptyList = List<int>.empty(growable: true);
List<int> fixedLenList = List<int>.filled(5,1);
}
2.3、使用List.generate创建
list.generate()可以根据生成器函数创建列表。第一个参数为列表长度,第二个参数为生成器函数。
示例:
void main() {
List<int> generateList = List.generate(5, (index)=>index*2);
print(generateList); // 输出:[0, 2, 4, 6, 8]
}
三、不可变列表
Dart中支持创建一个不可进行更改的列表,使用 List.unmodifiable() 创建。
示例:
void main() {
List<int> unmodifiableList = List.unmodifiable([2,23,23,54,8,12,2]);
unmodifiableList.add(4); // Unsupported operation: Cannot add to an unmodifiable list
}
运行时报错:
四、常用属性和方法
4.1、常用属性
- length:获取列表长度。
- isEmpty:判断是否为空列表,为空列表输出true,否则false。
- first:获取列表第一个元素。
- last:获取列表最后一个元素。
示例:
void main() {
List<int> intList = [2,23,23,54,8,12,2];
print(intList.length); // 输出:7
print(intList.isEmpty); // 输出:false
print(intList.first); // 输出:2
print(intList.last);// 输出:2
}
4.1、常用方法
- indexOf():获取元素下标。
- contains():判断列表中是否包含某个元素。
- sort():按照升序排序列表中的元素。
- 高阶函数:map()、where()等。
示例:
void main() {
List<int> intList = [2,23,23,54,8,12,2];
print(intList.indexOf(2)); // 输出:0
print(intList.contains(1220)); // 输出:false
intList.sort();
print(intList); // 输出:[2, 2, 8, 12, 23, 23, 54]
List<int> mapIntList = intList.map((n)=>n*2).toList();
print(mapIntList); // 输出:[4, 4, 16, 24, 46, 46, 108]
List<int> whereIntList = intList.where((n)=>n%2==0).toList();
print(whereIntList); // 输出:[2, 2, 8, 12, 54]
}
五、访问元素
列表支持下标访问元素和遍历元素。
5.1、下标访问元素
通过位置索引访问元素。
注意:索引从0开始。
示例:
void main() {
List<dynamic> dynamicList = [23,23,'apple',8,'peach',12.5,true];
print(dynamicList[3]); // 输出:8
}
5.2、遍历
将列表中的所有元素访问一遍。
- 使用for循环遍历。
- 使用for-in遍历。
- 使用高阶函数forEach()遍历。
示例:for循环遍历
void main() {
List<dynamic> dynamicList = [23,23,'apple',8,'peach',12.5,true];
for(int i=0;i<dynamicList.length;i++){ // 通过下标依次访问
print(dynamicList[i]);
}
}
示例:for-in遍历
void main() {
List<dynamic> dynamicList = [23,23,'apple',8,'peach',12.5,true];
for(var element in dynamicList){
print(element);
}
}
示例:高阶函数forEach()遍历
void main() {
List<dynamic> dynamicList = [23,23,'apple',8,'peach',12.5,true];
dynamicList.forEach((element)=>print(element));
}
六、添加元素
- add():添加元素到列表末尾。
- insert():添加元素到指定位置。
- addAll():批量添加元素。
示例:
void main() {
List<int> intList = [2,23,23,54,8,12,2];
intList.add(5);
print(intList);// 输出:[2, 23, 23, 54, 8, 12, 2, 5]
intList.insert(4, 1200);
print(intList);// 输出:[2, 23, 23, 54, 1200, 8, 12, 2, 5]
intList.addAll([12,43,9]);
print(intList); // 输出:[2, 23, 23, 54, 1200, 8, 12, 2, 5, 12, 43, 9]
}
七、修改元素
修改元素分为两步,第一步访问到需要修改的元素,第二步进行修改。
示例:
void main() {
List<int> intList = [2,23,23,54,8,12,2];
intList[4] = 88888;
print(intList); // 输出:[2, 23, 23, 54, 88888, 12, 2]
}
八、移除元素
从列表中删除元素。
- remove():移除指定元素。
- removeLast():移除列表末尾的元素。
- clear():清空列表
示例:
void main() {
List<dynamic> dynamicList = [23,23,'apple',8,'peach',12.5,true];
dynamicList.remove('apple');
print(dynamicList); // 输出:[23, 23, 8, peach, 12.5, true]
dynamicList.removeLast();
print(dynamicList); // 输出:[23, 23, 8, peach, 12.5]
dynamicList.clear();
print(dynamicList); // 输出:[]
}
九、总结
本小节归纳总结如下:
| 方法或属性 | |
|---|---|
| 创建和初始化 | 1、使用[]创建;2、 List<int>.empty();3、 list<int>filled();4、 List.generate(); |
| 不可变列表 | List.unmodifiable()创建。 |
| 常用属性和方法 | 1、length属性; 2、isEmpty属性;3、first属性; 4、last属性;1、 indexOf()方法; 2、contains()方法;3、sort()方法; 4、map()等高阶函数; |
| 访问元素 | 1、下标访问 ; 2、 for循环遍历;3、 for-in遍历;4、 forEach()遍历; |
| 添加元素 | 1、add() ;2、 addAll();3、 insert(); |
| 修改元素 | 通过下标找到元素,然后进行修改。 |
| 移除元素 | 1、remove() ;2、 removeLast();3、 clear(); |