Flutter基础
第一章 Flutter数组的使用
文章目录
前言
在使用flutter开发已经有一段时间了,在之前都是快速开发,没有时间去复盘自己的知识体系,现在就从flutter的基本语法开始,一步步分析flutter涉及到的细节问题,希望对你有所帮助。
提示:以下是本篇文章正文内容,下面案例可供参考
一、数组是什么?
- 数组(Array)是有序的元素序列。若将有限个类型相同的变量的集合命名,那么这个名称为数组名。组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量。用于区分数组的各个元素的数字编号称为下标。数组是在程序设计中,为了处理方便, 把具有相同类型的若干元素按有序的形式组织起来的一种形式。这些有序排列的同类数据元素的集合称为数组。
- 数组是用于储存多个相同类型数据的集合。
二、数组的定义
1.直接赋值
dart使用var关键字声明参数,会自动推断类型。
var array = [];
var array1 = [1,2,3];
2.字符串类型
var array = ['string'];
var array1 = <String>['123','456'];
List<String> array3 = ['789'];
3.数据模型
class PersonModel {
int id;
PersonModel(this.id);
}
var array = [PersonModel(1)];
var array1 = <PersonModel>[PersonModel(2), PersonModel(3)];
List<PersonModel> array3 = [PersonModel(4)];
3.定义固定长度数组
var list = List.filled(5,' ');// 字符串数组[' ',' ',' ',' ',' ']
var list1 = List<String>.filled(5, ''); // 字符串数组
var list2 = List<dynamic>.filled(5, '');// 混合类型固定长度数组
var list2 = List<PersonModel>.filled(5, PersonModel(1));// 类型为PersonModel的数组
三、数组的常用属性
1.数组长度
var list = [1,2,3];
print("数组长度==${list.length}");//数组长度==3
2.数组翻转
var list = [1,2,3];
print("数组翻转==${list.reversed}");//数组翻转==(3, 2, 1)
3.是否为空
.isEmpty为空true 不为空false
var list = [1,2,3];
print("是否为空==${list.isEmpty}");//是否为空==false
var list1 = [];
print("是否为空==${list1.isEmpty}");//是否为空==true
4.是否不为空
.isNotEmpty 为空false 不为空true
var list = [1,2,3];
print("是否不为空==${list.isNotEmpty}");//是否不为空==true
var list1 = [];
print("是否不为空==${list1.isNotEmpty}");//是否不为空==false
5.获取第一个元素
var list = [1,2,3];
print("获取第一个元素==${list.first}");//获取第一个元素==1
6.获取最后一个元素
var list = [1,2,3];
print("获取最后一个元素==${list.last}");//获取最后一个元素==3
四、数组的增加方法
1.增加元素
//void add(E value);
var list = [1, 2, 3];
list.add(4);
print("增加元素==${list}"); //增加元素==[1, 2, 3, 4]
2.拼接数组
//void addAll(Iterable<E> iterable);
var list = [1, 2, 3];
list.addAll([4,5,6]);
print("拼接数组==${list}"); //拼接数组==[1, 2, 3, 4,5,6]
3.插入元素
//void insert(int index, E element);
//主页index下标不能大于数组长度加1,如下在下标为3是可以插入数据的,如果下标大于length+1就会报错
var list = [1, 2, 3];
list.insert(3, 4);
print("插入元素==${list}"); //插入元素==[1, 2, 3, 4]
4.插入数组
//void insertAll(int index, Iterable<E> iterable);
var list = [1, 2, 3];
list.insertAll(3, [4,5]);
print("插入数组==${list}"); //插入数组==[1, 2, 3, 4, 5]
五、数组的删除方法
1.删除元素
//bool remove(Object? value);
var list = [1, 2, 3];
bool isSuccess = list.remove(3);
print("是否删除成功==${isSuccess}");//是否删除成功==true
print("删除元素==${list}"); //删除元素==[1, 2]
2.通过下标删除元素
//E removeAt(int index);
var list = [1, 2, 3];
int value = list.removeAt(2);
print("删除的元素是==${value}");
print("通过下标删除元素==${list}"); //通过下标删除元素==[1, 2]
3.删除最后一位元素
//E removeLast();
var list = [1, 2, 3];
int value = list.removeLast();
print("删除的元素是==${value}");
print("list==${list}"); //list==[1, 2]
4.范围删除,传入区间下标
//void removeRange(int start, int end);
var list = [1, 2, 3, 4, 5, 6];
list.removeRange(2, 4);
print("list==${list}"); //list==[1, 2, 5, 6]
5.删除符合函数返回值为true的元素
//void removeWhere(bool test(E element));
var list = [1, 2, 3, 4, 5, 6];
list.removeWhere((element) => element > 4);
print("list==${list}"); //list==[1, 2, 3, 4]
6.删除所有元素
//void clear();
var list = [1, 2, 3, 4, 5, 6];
list.clear();
print("list==${list}"); //list==[]
六、数组的修改替换
1.修改区间为指定数组的值
//void setRange(int start, int end, Iterable<E> iterable, [int skipCount = 0]);
var list = [1, 2, 3, 4, 5, 6];
list.setRange(2, 5, [1, 1, 1, 1]);
print("list==${list}"); //list==[1, 2, 1, 1, 1, 6]
//为什么?替换下标是2<=x<5,更新的数组值也只去2,3,4下标的值,使用的时候需要注意!而且替换下标的数要小于替换数组,不然报错
//skipCount 默认为0,表示从第几位开始选取指定数组的值,使用概率较低
2.修改指定索引后的值
//void setAll(int index, Iterable<E> iterable);
var list = [1, 2, 3, 4, 5, 6];
list.setAll(2, [1, 8, 1, 1]);
print("list==${list}"); //list==[1, 2, 1, 8, 1, 1]
//也要注意数组越界问题
3.将指定区间替换成指定值
//void fillRange(int start, int end, [E? fillValue]);
var list = [1, 2, 3, 4, 5, 6];
list.fillRange(2, 5, 8);
print("list==${list}"); //list==[1, 2, 8, 8, 8, 6]
4.将区间值替换为数组内的值
//void replaceRange(int start, int end, Iterable<E> replacements);
var list = [1, 2, 3, 4, 5, 6];
list.replaceRange(2, 5, [8, 9]);
print("list==${list}"); //list==[1, 2, 8, 9, 6]
5.其他类型转换成List
把字典里key或value的值抽离出来变成数组
// List<E> toList({bool growable = true}) {
// return List<E>.of(this, growable: growable);
// }
final planets = <int, String>{1: 'Mercury', 2: 'Venus', 3: 'Mars'};
final keysList = planets.keys.toList(growable: false); // [1, 2, 3]
final valuesList =
planets.values.toList(growable: false); // [Mercury, Venus, Mars]
6.数组转换为字符串
var list = [1, 2, 3, 4, 5, 6];
var string = list.join('=');
print("string==${string}"); //string==1=2=3=4=5=6
七、数组的查找
1.传入具体值 返回值为索引
//int indexOf(E element, [int start = 0]);
//可以设置开始查找的位置下标
//不存在返回-1
var list = [1, 2, 3, 4, 5, 6];
var index = list.indexOf(5);
print("index==${index}"); //index==4
2.传入具体值 返回值为索引-倒序
//int lastIndexOf(E element, [int start = 0]);
//可以设置开始查找的位置下标
//不存在返回-1
var list = [1, 2, 3, 4, 5, 6];
var index = list.lastIndexOf(3);
print("index==${index}"); //index==2
3.查找区间的值,返回数组
//List<E> sublist(int start, [int? end]);
var list = [1, 2, 3, 4, 5, 6];
var array = list.sublist(3, 4);
print("array==${array}"); //array==[4]
4.查找区间的值,返回迭代器
//Iterable<E> getRange(int start, int end);
var list = [1, 2, 3, 4, 5, 6];
var array = list.getRange(3, 5);
print("array==${array}"); //array==(4, 5)
5.判断数组是否有符合条件的值,返回布尔值
//bool any(bool test(E element))
var list = [1, 2, 3, 4, 5, 6];
var bool = list.any((value) => value > 5);
print("bool==${bool}"); //bool==true
6.查找数组是否包含值,返回布尔值
//bool contains(Object? element)
var list = [1, 2, 3, 4, 5, 6];
var bool = list.contains(6);
print("bool==${bool}"); //bool==true
7.获取满足条件的第一个元素
//E firstWhere(bool test(E element), {E orElse()?})
var list = [1, 2, 3, 4, 5, 6];
var value = list.firstWhere((value) => value > 3);
print("value==${value}"); //value==4
8.获取满足条件的最后一个元素
//E lastWhere(bool test(E element), {E orElse()?})
var list = [1, 2, 3, 4, 5, 6];
var value = list.lastWhere((value) => value > 3);
print("value==${value}"); //value==6
9.从指定位置开始,获取满足条件的第一个元素索引
如果需要遍历数组,获取某个item的下标,就可以用这个方法了
//int indexWhere(bool test(E element), [int start = 0]);
var list = [1, 2, 3, 4, 5, 6];
var index = list.indexWhere((value) => value == 3);
print("index==${index}"); //index==2
10.从指定位置开始,获取满足条件的最后一个元素索引
//int lastIndexWhere(bool test(E element), [int? start]);
var list = [1, 2, 3, 4, 3, 6];
var index = list.lastIndexWhere((value) => value == 3);
print("index==${index}"); //index==4
11.查找是否存在满足条件的唯一值,存在返回这个元素,不存在执行第二个函数
//E singleWhere(bool test(E element), {E orElse()?})
var list = [1, 2, 3, 4, 3, 6];
var value = list.singleWhere((element) => element > 7, orElse: () {
print("不存在这个元素,返回1");
return 1;
});
print("value==${value}"); //value==1
}
八、数组的去重
会变成集合类型
var list = [1, 2, 3, 3, 4, 4, 5, 6];
var value = list.toSet();
print("value==${value}"); //value=={1, 2, 3, 4, 5, 6}
九、数组的遍历
1.map遍历
var list = [1, 2, 3, 3, 4, 4, 5, 6];
var value = list.map((e) => e > 3);
print("value==${value}"); //value==(false, false, false, false, true, true, true, true)
2.for遍历
var list = [1, 2, 3, 4];
for (var i = 0; i < list.length; i++) {
print("value==${list[i]}");
}
// flutter: value==1
// flutter: value==2
// flutter: value==3
// flutter: value==4
3.forin遍历
var list = [1, 2, 3, 4];
for (var value in list) {
print("value==$value");
}
// flutter: value==1
// flutter: value==2
// flutter: value==3
// flutter: value==4
九、数组的累加器
1.reduce
var list = [1, 2, 3, 4];
var value = list.reduce((value, element) => value + 1);
print('value==$value');
十、排序
1.sort
var list = [1, 2, 3, 4];
list.sort();
print('value==$list');
总结
例如:以上就是今天要讲的内容,本文仅仅简单介绍了数组的使用,而数组List提供了大量能使我们快速便捷地处理数据的函数和方法。希望文章对你有所帮助,后续继续完善。