Dart数组常见操作

最近开始写flutter了 以下是最近开发中对数组操作的一些心得 记录下方便今后开发查阅
点击进入我的自建博客链接

一、基础操作

1.常用属性

List list=[1,2,345];
// 返回长度
print(list.length);// 5
// 以相反的顺序返回包含列表值的可迭代对象
print(list.reversed);//  (5,4,3,2,1)
// 我们再使用toList可以将它转换回list
print(list.reversed.toList());// [5,4,3,2,1]
// 是否为空
print(list.isEmpty);// false 
// 是否不为空
print(list.isNotEmpty);// true
// 返回列表中的第一个元素 
print(List.first);// 1

2.常见方法

// **增加**
// 将指定值到列表的结尾,并返回修改的列表对象
list.add(6);
print(list);// [1,2,3,4,5,6]
// 接受由逗号分隔的多个值附加到列表
list.addAll([6,7]);
print(list);// [1,2,3,4,5,6,7]
// 从指定的索引之前插入添加元素
list.insert(1,'a');
print(list);// [1,'a',2,3,4,5]
// 从指定的索引之前插入给定的值列表
list.insertAll(1,['a','b']);//
print(list);// [1,'a','b',2,3,4,5]

// **删除**
// 删除列表中第一次出现的指定项。此函数有返回值 若从list中删除指定的值,则返回true
list.remove(5);
print(list);// [1,2,3,4]
 // 数删除指定索引处的值
list.removeAt(0);
print(list);// [2,3,4,5]

// **修改**
//指定修改  起始位置,结束为止,修改的值
list.fillRange(1,2,'a');
print(list);// [1,'a',3,4,5]

// **查找**
print(list.indexOf(10));// 值查找 -1 
print(list.indexOf(5));// 值查找 4
 
// 拼接 - 分隔
var str = list.join('-');// 拼接
print(str);// '1-2-3-4-5'

String str = 'a-b-c-d' 
newList = str.split('-');// 分隔
print(newList);// ['a','b','c','d']

// 用于判断数组是否包含某个元素
print(students.contains(5));// true

3、进阶方法

List<Map> students = [
 { 'name': 'tom', 'age': 16 },
 { 'name': 'jack', 'age': 18 },
 { 'name': 'lucy', 'age': 20 }
];

forEach()

可以遍历一个数组或者是一个map

students.forEach((student) => print(student));
// {name: tom, age: 16}
// {name: jack, age: 18}
// {name: lucy, age: 20}

Map tom = { 'name': 'tom', 'age': 16 };
tom.forEach((k,v) => print(k + '-' + v.toString()));
// name - tom
// age - 16

Map()

可以用来操作已知数组里的每一项,然后返回一个新数组

var messages = students.map((student) => 'Hi,' + student['name']).toList();
print(messages);// [Hi,tom, Hi,jack, Hi,lucy]

print(tom.keys);//(name, age)
print(tom.values);//(tom, 16)
print(details.length);// 2
// map循环遍历只能用foreach

contains()

用于判断数组是否包含某个元素

print(students.contains(5));
// true

sort()

用于排序,接收一个函数当做参数

numbers.sort((num1, num2) => num1 - num2);
print(numbers);
// [1, 2, 3, 5, 7, 8]

reduce(), fold()

reduce() 将数组中的每一个值与前面返回的值相加,最后返回相加的总和
fold() 用法跟 reduce() 基本一样,只不过是可以提供一个初始值

var sum = numbers.reduce((curr, next) => curr + next);
print(sum);
// 26

var sum2 = numbers.fold(10, (curr, next) => curr + next);
print(sum2);
// 36

every()

用于判断数组中的每一项是否均达到了某个条件

var isAgeOver20 = students.every((student) => student["age"] > 20);
print(isAgeOver20);
// false

var isAgeOver15 = students.every((student) => student["age"] > 15);
print(isAgeOver15);
// true

where(), firstWhere(), singleWhere()

where() 返回数组中满足给定条件的元素集合
firstWhere() 返回数组中满足给定条件的第一个元素
singleWhere() 返回数组中满足给定条件的唯一一个元素,若有多个元素满足条件会抛出异常

var ageOver16 = students.where((student) => student["age"] > 16);
print(ageOver16.toList());
// [{name: jack, age: 18}, {name: lucy, age: 20}]

var ageFirstOver16 = students.firstWhere((student) => student["age"] > 16, orElse: () => null);
print(ageFirstOver16);
// {name: jack, age: 18}

var ageUnder20 = students.singleWhere((student) => student["age"] < 16, orElse: () => null);
print(ageUnder20);
// null

take(), skip()

take(n) 从数组里取 n 个元素
skip(n) 跳过数组中的 n 个元素

List arr = [1, 3, 5, 2, 7, 9];

print(arr.take(3).toList());
// [1, 3, 5]
print(arr.skip(4).toList());
// [7, 9]
print(arr.take(3).skip(2).take(1).toList());
// [5]

List.from()

克隆一个数组

List arr = [1, 3, 5, 2, 7, 9];

var clonedArr = List.from(arr);
print(clonedArr);
// [1, 3, 5, 2, 7, 9]

expand()

var arr1 = [[2, 5], [7], [11, 12]];
var flattened = arr1.expand((item) => item).toList();
print(flattened);
// [2, 5, 7, 11, 12]

var arr2 = [2, 5, 8];
var computed = arr2.expand((item) => [item * 8]).toList();
print(computed);
// [16, 40, 64]

// 当对每一项进行计算时类似于 map()
var computed2 = arr2.map((item) => item * 8).toList();
print(computed2);
// [16, 40, 64]

removeRange

删除指定区域的元素

var testList =['a','b','c'];
testList.removeRange(0,1);
print(testList);

数组去重

var testList =['a','b','c','a'];
var s = Set();
s.addAll(testList);
print(s);// {a, b, c}
print(s.toList());// [a, b, c]
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hhua.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值