写点什么

没有人比我更会使用集合!对, 是 dart 中的集合

作者:程序那些事
  • 2021 年 11 月 25 日
  • 本文字数:1523 字

    阅读完需:约 5 分钟

没有人比我更会使用集合!对,是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 的基本用法:

//创建一个空的setvar 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:

// 创建mapvar 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/

最通俗的解读,最深刻的干货,最简洁的教程,众多你不知道的小技巧等你来发现!

欢迎关注我的公众号:「程序那些事」,懂技术,更懂你!

发布于: 5 小时前阅读数: 9
用户头像

关注公众号:程序那些事,更多精彩等着你! 2020.06.07 加入

最通俗的解读,最深刻的干货,最简洁的教程,众多你不知道的小技巧,尽在公众号:程序那些事!

评论

发布
暂无评论
没有人比我更会使用集合!对,是dart中的集合