没有人比我更会使用集合!对, 是dart中的集合
简介
dart中的集合有三个,分别是list,set和map。dart在dart:core包中提供了对于这三种集合非常有用的方法,一起来看看吧。
List的使用
首先是list的创建,可以创建空的list或者带值的list:
var emptyList =[];
var nameList = ['jack','mac'];
使用List的构造函数来创建:
var nameList = List.filled(2, 'max');
向list中添加元素或者list:
nameList.add('tony');
nameList.addAll(['lili', 'bruce']);
删除元素:
nameList.removeAt(0);
nameList.clear();
dart提供了list的排序方法sort(),sort可以接一个比较的函数,用来表示谁在前谁在后:
var names = ['jack', 'tony', 'max'];
fruits.sort((a, b) => a.compareTo(b));
list中还可以使用泛型,表示list中固定的类型:
var names = <String>[];
names.add('jack');
Set的使用
Set表示的是不重复的元素的集合。但是set和list不同的是set是无序的,所以你不能用index来定位set中的元素。
来看下set的基本用法:
//创建一个空的set
var names = <String>{};
// 添加新的元素
names.addAll(['jack', 'tony', 'max']);
//删除元素
names.remove('jack');
或者使用Set的构造函数来构造Set:
var names = Set.from(['jack', 'tony', 'max']);
判断集合中元素是否存在:
assert(names.contains('jack'));
assert(names.containsAll(['jack', 'tony']));
set还有一个intersection的操作,用来求两个set的交集:
var name1 = Set<String>();
name1.addAll(['jack', 'tony', 'max']);
var name2 = Set.from(['tony', 'bily']);
var intersection = name1.intersection(name2);
Map的使用
Map是一种key,value的数据类型,也是一种在程序中非常常见的数据类型。
先看下怎么创建Map:
// 创建map
var studentMap = {
'name': 'jack',
'age': '18',
'class': 'class one'
};
var teacherMap = Map();
var teacherMap2 = Map<String, String>();
添加和删除:
var studentMap =Map();
studentMap.putIfAbsent('name', ()=>'jack');
studentMap.remove('name');
判断map中是否包含某个key可以使用containsKey():
assert(studentMap.containsKey('name'));
常见的集合方法
集合中最常见的方法就是判断集合是否为空:
assert(studentMap.isEmpty);
assert(studentMap.isNotEmpty);
如果想对集合中的每个元素都进行某个函数操作,则可以使用forEach():
var names = ['jack', 'bob', 'tom'];
names.forEach((name) => print('the name is $name'));
var nameMap = {};
nameMap.forEach((k, v) {
});
如果是可遍历对象,则有一个map方法,map方法会返回一个新的对象:
var names = ['jack', 'bob', 'mark'];
var names2 = names.map((name) => name.toUpperCase());
注意,map返回的是一个Iterable,它是延时计算的,只有被使用的时候才会进行计算。
如果你想立即计算的话,则可以使用map().toList() 或者 map().toSet():
var names2 =
names.map((name) => name.toUpperCase()).toList();
可遍历对象还可以进行条件选择。比如使用where()来获得所有匹配的对象,使用any()来判断集合中是否有匹配的对象,使用every()来判断集合中是否全部匹配。
var names = ['jack', 'bob', 'max'];
bool hasJack(String name) =>
name == 'jack';
var seleteJack =
names.where((name) => hasJack(name));
assert(names.any(hasJack));
assert(!names.every(hasJack));
总结
集合是在程序编写过程中非常常用的一种类型,大家一定要熟练掌握。
本文已收录于 http://www.flydean.com/15-dart-collection/
最通俗的解读,最深刻的干货,最简洁的教程,众多你不知道的小技巧等你来发现!
欢迎关注我的公众号:「程序那些事」,懂技术,更懂你!
没有人比我更会使用集合!对, 是dart中的集合的更多相关文章
- 关于for与forEach遍历集合中对集合进行操作的问题
遍历List集合,在循环中再对List集合进行操作,有时候会遇到ConcurrentModificationException(并发修改异常);其实只有在forEach循环集合再对集合操作会发生异常: ...
- dart系列之:集合使用最佳实践
目录 简介 使用字面量创建集合 不要使用.length来判断集合是否为空 可遍历对象的遍历 List.from和iterable.toList where和whereType 避免使用cast 总结 ...
- c#---部分;把数组或者结构体存入集合里,然后再从集合中取出之后,输出;foreach既可以用到提取数组重点额数据,也可以提取集合中的数据(前提是集合中的元素是相同数据类型)
1.输入班级人数,统计每个人的姓名,性别,年龄:集合与数组 //Console.Write("请输入班级人数:"); //int a = int.Parse(Console.Rea ...
- 关于JDK中的集合总结(一)
静态方法只能继承,不能重写(Override). StringBufffer,数组,对象 都是容器. 加入数据,“zhangsan” true ,67, 三个数据数据类型不同,不能用数组作为集合,只能 ...
- C#中的集合之ArryList
List泛型集合 集合是OOP中的一个重要概念,C#中对集合的全面支持更是该语言的精华之一. 为什么要用泛型集合? 在C# 2.0之前,主要可以通过两种方式实现集合: a.使用ArrayList 直接 ...
- 牛客网Java刷题知识点之Java 集合框架的构成、集合框架中的迭代器Iterator、集合框架中的集合接口Collection(List和Set)、集合框架中的Map集合
不多说,直接上干货! 集合框架中包含了大量集合接口.这些接口的实现类和操作它们的算法. 集合容器因为内部的数据结构不同,有多种具体容器. 不断的向上抽取,就形成了集合框架. Map是一次添加一对元素. ...
- Java面试题:Java中的集合及其继承关系
关于集合的体系是每个人都应该烂熟于心的,尤其是对我们经常使用的List,Map的原理更该如此.这里我们看这张图即可: 1.List.Set.Map是否继承自Collection接口? List.Set ...
- 万字长文深入理解java中的集合-附PDF下载
目录 1. 前言 2. List 2.1 fail-safe fail-fast知多少 2.1.1 Fail-fast Iterator 2.1.2 Fail-fast 的原理 2.1.3 Fail- ...
- Java 中的集合接口——List、Set、Map
Java 中的集合接口——List.Set.Map 什么叫集合:集合就是Java API所提供的一系列类的实例,可以用于动态存放多个对象.这跟我们学过的数组差不多,那为什么我们还要学集合,我们看看数组 ...
随机推荐
- NOI 2021 部分题目题解
最近几天复盘了一下NOI 2021,愈发发觉自己的愚蠢,可惜D2T3仍是不会,于是只写前面的题解 Day1 T1 可以发现,每次相当于将 \(x\to y\) 染上一种全新颜色,然后一条边是重边当且仅 ...
- SpringCloud升级之路2020.0.x版-28.OpenFeign的生命周期-进行调用
本系列代码地址:https://github.com/JoJoTec/spring-cloud-parent 接下来,我们开始分析 OpenFeign 同步环境下的生命周期的第二部分,使用 Synch ...
- python T1119紧急措施
2021-10-18 题目: 近日,一些热门网站遭受黑客入侵,这些网站的账号.密码及 email 的数据惨遭泄露.你在这些网站上注册若干账号(使用的用户名不一定相同),但是注册时使用了相同的 emai ...
- C11 (GNU Dialect) -std=gnu11 和 -std=c11
C11 (GNU Dialect) -std=gnu11 和 -std=c11 C11 (GNU Dialect) -std=gnu11 和 -std=c11 用于 IntelliSense 的 C ...
- 在hive中使用COALESCE进行空值处理
COALESCE (expression_1, expression_2, ...,expression_n)依次参考各参数表达式,遇到非null值即停止并返回该值.如果所有的表达式都是空值,最终将返 ...
- Clusternet v0.5.0 重磅发布: 全面解决多集群应用分发的差异化配置难题
作者 徐迪,腾讯云容器技术专家. 汝英哲,腾讯云高级产品经理. 摘要 在做多集群应用分发的时候,经常会遇到以下的差异化问题,比如: 在分发的资源上全部打上统一的标签,比如 apps.my.compan ...
- WPF中的命令(Command)
这节来讲一下WPF中的命令(Command)的使用. [认识Command] 我们之前说过,WPF本身就为我们提供了一个基础的MVVM框架,本节要讲的命令就是其中一环,通过在ViewModel中声明命 ...
- Vue3+Typescript+Node.js实现微信端公众号H5支付(JSAPI v3)教程--各种填坑
----微信支付文档,不得不说,挺乱!(吐槽截止) 功能背景 微信公众号中,点击菜单或者扫码,打开公众号中的H5页面,进行支付. 一.技术栈 前端:Vue:3.0.0,typescript:3.9.3 ...
- 搬运2:早期写的探究printf
目录: 1. 关于printf格式化输出 2. printf的一般形式 3. 转换说明 4. 格式化输出的意义 5. 转换说明修饰符 6. 修饰符中的标记 7. printf的返回值 ps:共3250 ...
- cadence 技巧
pcb中如何选中完整的一条网络? 1 edit properties 右边 find nets 2 cadence 选中不同的网络高亮 display--->assign color在opt ...