简介

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中的集合的更多相关文章

  1. 关于for与forEach遍历集合中对集合进行操作的问题

    遍历List集合,在循环中再对List集合进行操作,有时候会遇到ConcurrentModificationException(并发修改异常);其实只有在forEach循环集合再对集合操作会发生异常: ...

  2. dart系列之:集合使用最佳实践

    目录 简介 使用字面量创建集合 不要使用.length来判断集合是否为空 可遍历对象的遍历 List.from和iterable.toList where和whereType 避免使用cast 总结 ...

  3. c#---部分;把数组或者结构体存入集合里,然后再从集合中取出之后,输出;foreach既可以用到提取数组重点额数据,也可以提取集合中的数据(前提是集合中的元素是相同数据类型)

    1.输入班级人数,统计每个人的姓名,性别,年龄:集合与数组 //Console.Write("请输入班级人数:"); //int a = int.Parse(Console.Rea ...

  4. 关于JDK中的集合总结(一)

    静态方法只能继承,不能重写(Override). StringBufffer,数组,对象 都是容器. 加入数据,“zhangsan” true ,67, 三个数据数据类型不同,不能用数组作为集合,只能 ...

  5. C#中的集合之ArryList

    List泛型集合 集合是OOP中的一个重要概念,C#中对集合的全面支持更是该语言的精华之一. 为什么要用泛型集合? 在C# 2.0之前,主要可以通过两种方式实现集合: a.使用ArrayList 直接 ...

  6. 牛客网Java刷题知识点之Java 集合框架的构成、集合框架中的迭代器Iterator、集合框架中的集合接口Collection(List和Set)、集合框架中的Map集合

    不多说,直接上干货! 集合框架中包含了大量集合接口.这些接口的实现类和操作它们的算法. 集合容器因为内部的数据结构不同,有多种具体容器. 不断的向上抽取,就形成了集合框架. Map是一次添加一对元素. ...

  7. Java面试题:Java中的集合及其继承关系

    关于集合的体系是每个人都应该烂熟于心的,尤其是对我们经常使用的List,Map的原理更该如此.这里我们看这张图即可: 1.List.Set.Map是否继承自Collection接口? List.Set ...

  8. 万字长文深入理解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- ...

  9. Java 中的集合接口——List、Set、Map

    Java 中的集合接口——List.Set.Map 什么叫集合:集合就是Java API所提供的一系列类的实例,可以用于动态存放多个对象.这跟我们学过的数组差不多,那为什么我们还要学集合,我们看看数组 ...

随机推荐

  1. NX Open 图层说

    我也是偶然发现的,在一次调试下,竟然会报警. 所以我写了测试代码,进行测试:结果如下 纳尼???还有271层?还能设置大于256层?NX open可以的.

  2. verilog specify

    specify block用来描述从源点(source:input/inout port)到终点(destination:output/inout port)的路径延时(path delay),由sp ...

  3. 更好的 java 重试框架 sisyphus 的 3 种使用方式

    回顾 我们前面学习了 更好的 java 重试框架 sisyphus 入门简介 更好的 java 重试框架 sisyphus 配置的 2 种方式介绍 更好的 java 重试框架 sisyphus 背后的 ...

  4. 【数据结构与算法Python版学习笔记】树——二叉查找树 Binary Search Tree

    二叉搜索树,它是映射的另一种实现 映射抽象数据类型前面两种实现,它们分别是列表二分搜索和散列表. 操作 Map()新建一个空的映射. put(key, val)往映射中加入一个新的键-值对.如果键已经 ...

  5. csp-s 2021

    T1 廊桥分配 当一架飞机抵达机场时,可以停靠在航站楼旁的廊桥,也可以停靠在位于机场边缘的远机位. 乘客一般更期待停靠在廊桥,因为这样省去了坐摆渡车前往航站楼的周折. 然而,因为廊桥的数量有限,所以这 ...

  6. 常用JAVA API :HashSet 和 TreeSet

    set容器的特点是不包含重复元素,也就是说自动去重. HashSet HashSet基于哈希表实现,无序. add(E e)//如果容器中不包含此元素,则添加. clear()//清空 contain ...

  7. ab矩阵(实对称矩阵)

    今天在做题时巧遇了很多此类型的矩阵,出于更快解,对此进行学习.(感谢up主线帒杨) 1.认识ab矩阵 形如:主对角线元素都是a,其余元素都是b,我们称之为ab矩阵(默认涉及即为n×n阶) 2.求|A| ...

  8. hdu 1171 Big Event in HDU(背包DP)

    题意: 杭电搬迁,有N种设备,每种设备有个价值V,数量M,要求将这些设备平分,使得平分后两边的总价值尽可能地相等. 输出两边各自的总价值. 思路: 背包DP后,P=所有的总价值/2,然后从P开始往两边 ...

  9. cf Make It Nondeterministic (简单贪心)

    有N个人.每个人都有两个名字. 给出这N个人的一个排列.p[1]...p[N]. 现在让每个人挑自己丙个名字中的一个名字.问是否存在一种方案,使得挑出来的N个名字按字典序排完以后正好是p[1]...p ...

  10. 七. Go并发编程--sync.Once

    一.序 单从库名大概就能猜出其作用.sync.Once使用起来很简单, 下面是一个简单的使用案例 package main import ( "fmt" "sync&qu ...