天天看點

沒有人比我更會使用集合!對, 是dart中的集合簡介List的使用Set的使用Map的使用常見的集合方法總結

簡介

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/

最通俗的解讀,最深刻的幹貨,最簡潔的教程,衆多你不知道的小技巧等你來發現!

歡迎關注我的公衆号:「程式那些事」,懂技術,更懂你!