在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");
}