Dart 之列表(List)

405 阅读5分钟

Dart之函数.png

前言

如果你是刚刚踏入编程世界的新手,可能会好奇:如何在代码中高效管理一组数据?答案就是列表(List) ——它就像现实生活中的“购物清单”或“待办事项表”,能帮你将多个元素有序地组织在一起,轻松完成增删改查等操作。相信你已经开始好奇列表是什么啦?接下来我们将一起从零开始认识Dart列表这把利器。

一、基本概念

1.1、定义

列表(List)也称为有序集合,是集合类型中的一种,其是基于动态数组实现的数据结构,可以存储相同类型或不同类型的元素。每个元素都有固定的位置索引,通过索引可以方便地访问到元素。

如下图所示蓝色部分为列表内容,红色部分为列表内容对应的位置索引。

列表示例.png

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
}

运行时报错: image.png

四、常用属性和方法

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();