一架梯子,一头程序猿,仰望星空!

Dart List数组类型


在Dart语言中数组类型就是List, 是泛型类型数据结构,支持任意数据类型的数组。

说明:泛型(Generic)类似java的泛型结构,是一种模板语法结构,后续会有专门的章节详细介绍。

1.List数组定义和初始化

Dart语言中List数组主要有两种类型的数组:

  • 固定长度的数组
  • 可变数组 - 即数组长度可以动态增加

当然不管是哪种类型的List数组,他们操作方式都是一样的。

一般初始化List数组方式如下:

var list = [1, 2, 3];

实际上定义了List<int>类型的数组,熟悉java的人都知道,这种就是泛型类型的语法,<>符号定义的是List的元素类型,上面例子就是定义了存储int类型数据的List数组。

下面是通过明确类型定义数组的方式:

// List<int> a =  new List();
// 通过List对象定义int数组
List<int> a = List(); // 在Dart语言中new是可选的

// 定义int数组
var b = List<int>(); // 也可以通过指定List泛型类型定义数组.

// 定义String数组
List<String> strs = ["字符串1", "字符串2"];

上面两种方式没有指定数组大小,因此他们定义的都是可变数组,可变数组可以往数组中插入不限制数量的元素 (只要没超过内存限制)。

创建固定类型数组:

List<int> fixedLengthList = List(5);

这里通过List对象创建了一个数组长度为5的数组。

伸展运算符( ... )

如果我们想将一个List数组的元素填充到另外一个数组去,我们可以使用伸展运算符。

例子:

var list = [1, 2, 3];
var list2 = [0, ...list]; // 将list数组的所有元素一个个展开来,插入到list2中
// 等价代码 var list2 = [0, 1, 2, 3]

2.List基本操作

这里介绍List读写操作。

// 首先定义个空的int数组
var a = List<int>();

// 往数组尾巴添加一个元素
a.add(100);

// 通过数组下标,读取第一个元素, 数组下标从0开始计算
var data = a[0];

// 修改第一个元素的值
a[0] = 101;

// 在数组0位置,插入100
a.insert(0,100);

// 删除一个数据
a.remove(100);
// 清空List,删除所有数据
a.clear();

这里需要注意的是,如果List是固定长度的数组,那么只能通过数组下标的方式读写数组,不能使用add,insert方法修改数组,否则会报错。

例子:

// 固定长度List
var a = List<int>(5);

// 固定长度数组只能通过下面的下标的方式读写数组,而且数组下标不能超过数组长度。
a[0] = 1;
a[1] = 2;

var data = a[1];

3.获取List大小

通过数组对象的length属性可以读取数组大小。

var a = [1,2,3,4,5]

// 数组大小等于5
print(a.length)

4.List数组排序

List数组排序可以通过sort函数实现。

例子:

// 定义int 无序数组
var a = [5,1,2,6,3]

// 默认数组从小到大排序
a.sort();

print(a);

输出:

[1, 2, 3, 5, 6]

实现数组从大到小排序, 需要给sort方法传入一个比较函数

list.sort((a, b) => a < b ? 1 : -1);

这里传入的是箭头函数(闭包函数的一种写法),后面关于函数的章节会有详细介绍。

5.查找List数组元素

通过indexOf函数可以查询一个元素在数组中首次出现的位置。

例子:

var pos = list.indexOf(5)

6.判断List数组是否包含元素

通过contains函数可以检测List是否包含指定元素。

例子:

if (list.contains(3)) {
	print("list包含数字3");
}