乐趣区

关于dart:没有人比我更会使用集合对-是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/

最艰深的解读,最粗浅的干货,最简洁的教程,泛滥你不晓得的小技巧等你来发现!

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

退出移动版