简介
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/
最艰深的解读,最粗浅的干货,最简洁的教程,泛滥你不晓得的小技巧等你来发现!
欢送关注我的公众号:「程序那些事」,懂技术,更懂你!