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 =[];
names.add(jack);
Set表示的是不重復的元素的集合。但是set和list不同的是set是無序的,所以你不能用index來定位set中的元素。
來看下set的基本用法:
//創建一個空的set
var names ={};
// 添加新的元素
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();
name1.addAll([jack, tony, max]);
var name2 = Set.from([tony, bily]);
var intersection = name1.intersection(name2);
Map是一種key,value的數據類型,也是一種在程序中非常常見的數據類型。
先看下怎么創建Map:
// 創建map
var studentMap = {
name: jack,
age: 18,
class: class one
};
var teacherMap = Map();
var teacherMap2 = Map();
添加和刪除:
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/??
最通俗的解讀,最深刻的干貨,最簡潔的教程,眾多你不知道的小技巧等你來發現!
歡迎關注我的公眾號:「程序那些事」,懂技術,更懂你!