Dart的集合和控制流程
一起从0开始学习Flutter!
Dart跟我们常用的语言也是有List,Map,Set这些类型的集合类型,只是有的用法跟我们以前接触的略有不同。
- List 一个集合的初始化可以通过三种形式,第一行创建了一个固定长度的列表,如果出现了超过长度则会直接报错,后两种都是可以创建一个可变长度的集合,在后面通过add和insert方法添加单个元素,通过addAll添加一组元素。
List sizeList = List(3);
List emptyList = List();
List list = ["11","22","33","44"];
emptyList.add("55");
list.addAll(emptyList);
// sizeList.addAll(list);Cannot add to a fixed-length list
list.insert(0, "00");
print(list);//[00, 11, 22, 33, 44, 55]
- List遍历 在集合中我们最常用到的就是对集合的遍历,给大家看几种比较常用的遍历方式。
//方式一
for (var i = 0;i < list.length;i++) {
print("item is "+list[i]);
}
//方式二
for (var item in list) {
print("item is $item");
}
//方式三
list.forEach((item){
print("item is $item");
});
还有一种常用的遍历是使用list的every方法,特别之处在于它返回的是一个bool类型,在碰到不满足条件的元素后会返回False,并停止循环,如果所有元素都满足条件则返回True。
var result = list.every((item){
var s = item as String;
print("刚刚进来的数据是$s");
/*
刚刚进来的数据是00
刚刚进来的数据是11
刚刚进来的数据是22
刚刚进来的数据是33
刚刚进来的数据是44 */
return s != '44';
});
print("result is $result");//result is false
- Set Set的初始化只有两种形式,Set跟其他语言的Set一样都是自带了去重特性,只是它在去重完了还是保持着一个有序的集合。
var setList = {"a","b","c","d","a","b"};
print(setList);//{a, b, c, d}
var set = Set();
set.add("a");
set.add("b");
set.add("c");
print(set);//{a, b, c}
- Set遍历 Set的循环也可以使用上面List中介绍的循环方式,还介绍一种也是常用的适用于所有集合的一种遍历所有元素的方法,map方法。特别之处在于在遍历的同时我们可以修改元素的内容,获得到一个修改完的集合。
var setMap = set.map((item){
if(item is String)//数据类型的判断,is操作符判断是否后面指定的类型,非操作为is!
return item.toUpperCase();
});
print(setMap);//(A, B, C)
- Map Map的初始化也是有两种形式,跟Set一样它也是在有相同Key的时候去重完了保持一个有序的状态。可以通过使用containsKey和containsValue方法来查询想要找的元素是否存在。
var mapList = {'a':'11','b':'22','c':'33','c':'44'};
print(mapList);//{a: 11, b: 22, c: 44}
var map = Map();
map["aa"] = "11";
map["bb"] = "22";
map["cc"] = "33";
map["aa"] = "44";
print(map);//{aa: 44, bb: 22, cc: 33}
print(map.containsKey("aa"));//true
print(map.containsValue("11"));//false
- Map的遍历 Map有着跟List和Set一样的遍历方式,只是注意我们在遍历是整个Map还是只对Key遍历的时候注意写法的不同就可以了。
map.forEach((key,value){
print("key is $key,value is $value");
});
var keys = map.keys;
keys.forEach((key){
print("key is $key");
});
- 控制语句 上面在各种集合的介绍里顺便加入了基本的几种控制流程的语句,有if..else..有三种for循环的写法,和forEach的用法,继续说一下switch..case..和do..while的用法。 乍一看感觉switch跟原来也没有区别,但是细看会发现在case2上多了一个label,而且这个label还出现在了我们调用之后,是不是感受到了状态机的味道,以后的多状态处理就可以使用它了。
switch (1) {
case 0:
print("0");
break;
case 1:
print("1");// 1
continue nums;
nums:
case 2:
print("2");// 2
break;
default:
}
do..while和while..do的用法跟其他语言的用法是一样的,没有其他需要注意的地方了。
List list = ["11","22","33","44"];
var i = 0;
do {
i++;
} while (i<list.length);
while(i > 0){
i--;
}
以上是Dart中的集合和控制流程语句基本用法,还有一些高级的用法可以在以后的学习中慢慢加进来。