这里总结了一些在 Dart 中常用的数组操作方法,以便查阅。

首先,我们准备两组数据,以方便后面使用:

List<Map> students = [
{ 'name': 'tom', 'age': 16 },
{ 'name': 'jack', 'age': 18 },
{ 'name': 'lucy', 'age': 20 }
]; List numbers = [2, 8, 5, 1, 7, 3];

本文中用到的 students 及 numbers 均指的是这里已经定义好的,后面不再重复。

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((key, value) => print(key + ' - ' + value.toString()));
// name - tom
// age - 16

Map()

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

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

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]

add(), addAll()

  • add() 向数组中添加一个元素
  • addAll() 向数组中添加另一个数组的所有元素
>var arr1 = [1, 3, 5, 9, 2, 1];

arr1.add(10);
print(arr1);
// [1, 3, 5, 9, 2, 1, 10]
arr1.addAll([15, 21]);
print(arr1);
// [1, 3, 5, 9, 2, 1, 10, 15, 21]
 
 

4人点赞

 
 

作者:三也视界
链接:https://www.jianshu.com/p/1c7d828b1153
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

Dart 中常用的数组操作方法总结的更多相关文章

  1. JavaScript中的常用的数组操作方法

    JavaScript中的常用的数组操作方法 一.concat() concat() 方法用于连接两个或多个数组.该方法不会改变现有的数组,仅会返回被连接数组的一个副本. var arr1 = [1,2 ...

  2. PHP中常用的数组函数总结

    整理了一份PHP开发中数组操作大全,包含有数组操作的基本函数,数组的分段和填充,数组与栈,数组与列队,回调函数,排序,计算,其他的数组函数等. 一,数组操作的基本函数 数组的键名和值 array_va ...

  3. js 里常用的数组操作方法

    var ar=[112,44,55,66,77,88,99,'00',77]; var ar1=['ddd','fff','ggg']; //concat() 拼接一个或多个数组: //console ...

  4. js中常用的数组方法

    在数组的尾部增加或删除某个元素:push() 和 pop() push() : 在数组的尾部追加一个或多个元素,并返回数组的长度 pop():在数组的尾部删除一个元素,并返回被删除项 var arr ...

  5. Java中常用的日期操作方法

    日常项目当中经常会用到操作日期,抽出时间总结了一下,欢迎和大家多多沟通学习,如有任何改进意见和建议,我的QQ是1243672,欢迎联系哦. /** * 日期操作类 * 开发公司:北京东达悦科技有限公司 ...

  6. js中常用的操作

    1.js中常用的数组操作 2.js中常用的字符串操作 3.js中常用的时间日期操作 4.定时器

  7. 数组操作方法(包括es5)

    //push(); 定义:可以可向数组的末尾添加一个或更多元素,并返回新的长度. 方法:push(); 语法:数组.push(新元素1,新元素2,....,新元素x) 返回值:把指定的值添加到数组后的 ...

  8. JavaScript常用数组操作方法

    数组是用于储存多个相同类型数据的集合,平时在数据的处理中用到最多,JavaScript 中常用的操作方法 1.concat()concat() 方法用于连接两个或多个数组.该方法不会改变现有的数组,仅 ...

  9. Java数组操作方法收集(快速判断某个值在这个数组中)

    Java数组操作最高效的方式是循环取值,如果转换成集合那么就会分配内存,效率不如前者,但是方法多,需要在性能调优上去权衡.切记:数组是数组,集合是集合. 下面是收集最常用的数组转成集合的操作方法: i ...

随机推荐

  1. LGOJP4381 [IOI2008]Island

    题目链接 https://www.luogu.org/problem/P4381 题解 基环树直径的板子.但是dfs会爆栈...所以最后改成了bfs.还是一个很考验码力的板子. 首先基环树的直径显然有 ...

  2. P2018 消息传递[dp]

    题目描述 巴蜀国的社会等级森严,除了国王之外,每个人均有且只有一个直接上级,当然国王没有上级.如果A是B的上级,B是C的上级,那么A就是C的上级.绝对不会出现这样的关系:A是B的上级,B也是A的上级. ...

  3. 版本管理工具:GIT

    ps:项目以前一直用的svn,现在自己写代码,需要进行版本控制,学习git. 入门:推荐廖雪峰老师的git入门教程. github 上的这个项目收录了很多git教程:很全面

  4. SHOI2008 cactus仙人掌图 和 UOJ87 mx的仙人掌

    cactus仙人掌图 题目描述 如果某个无向连通图的任意一条边至多只出现在一条简单回路(simple cycle)里,我们就称这张图为仙人掌图(cactus).所谓简单回路就是指在图上不重复经过任何一 ...

  5. DTCMS

    DTCMS数据表: http://www.cnblogs.com/hifor/p/4560882.html DTCMS系统框架: http://www.cnblogs.com/hifor/p/4561 ...

  6. 2019-2020-1 20199312 《Linux内核原理与分析》 第九周作业

    进程调度 1.中断:起到切出进程指令流的作用.中断处理程序是与进程无关的内核指令流.中断类型: 硬中断:可屏蔽中断和不可屏蔽中断.高电平说明有中断请求. 软中断/异常: 故障:出问题,但可以恢复到当前 ...

  7. ascii、unicode、utf-8、gbk 区别?

    发展史: https://www.cnblogs.com/houxt/p/11250878.html python2内容进行编码(默认ascii),而python3对内容进行编码的默认为utf-8. ...

  8. ElementUI入门和NodeJS环境搭建

    1. ElementUI简介 我们学习VUE,知道它的核心思想式组件和数据驱动,但是每一个组件都需要自己编写模板,样式,添加事件,数据等是非常麻烦的,   所以饿了吗推出了基于VUE2.0的组件库,它 ...

  9. PostgreSQL 11 新特性之覆盖索引(Covering Index)(转载)

    通常来说,索引可以用于提高查询的速度.通过索引,可以快速访问表中的指定数据,避免了表上的扫描.有时候,索引不仅仅能够用于定位表中的数据.某些查询可能只需要访问索引的数据,就能够获取所需要的结果,而不需 ...

  10. bzoj 3829: [Poi2014]FarmCraft 树形dp+贪心

    题意: $mhy$ 住在一棵有 $n$ 个点的树的 $1$ 号结点上,每个结点上都有一个妹子. $mhy$ 从自己家出发,去给每一个妹子都送一台电脑,每个妹子拿到电脑后就会开始安装 $zhx$ 牌杀毒 ...