从零开始掌握Flutter:Dart流程与集合详解

发表时间: 2020-07-28 00:12


本节主要讲Dart中的循环流程和常用的集合类的用法。

一、++和--

++ 表示自增1,a++相当于a=a+1;

-- 表示自减1, a--相当于a=a-1;

和其他语言一样,在赋值运算里面 如果++/-- 写在前面 这时候先运算再赋值,如果++/--写在后面先赋值后运行运算

二、流程控制

1、循环

  • for基本语法和其他语言基本一样,语法不多说了,直接上代码
for (int i = 1; i<=100; i++) {     print(i);}
  • while循环
//两种形式while(表达式/循环条件){						}			do{	语句/循环体}while(表达式/循环条件);		注意: 1、最后的分号不要忘记			    2、循环条件中使用的变量需要经过初始化		      3、循环体中,应有结束循环的条件,否则会造成死循环。

注意:

1、最后的分号不要忘记

2、循环条件中使用的变量需要经过初始化,

3、循环体中,应有结束循环的条件,否则会造成死循环。

//死循环int i=1;while(i<=10){  print(i);}
//正确的例子int i=1;var sum=0;while(i<=100){  sum+=i;  i++;}print(sum);//第二种形式do...while例子int i=1;var sum=0;do{  sum+=i;  i++;}while(i<=100);print(sum);

while 和 do while的区别:在第一次循环条件不成立的情况下,while不会执行循环体的代码,do...while会执行,也就是do...while的循环体至少要执行一次。



2、break和continue

break语句功能:

  • 在switch语句中使流程跳出switch结构。
  • 在循环语句中使流程跳出当前循环,遇到break 循环终止,后面代码也不会执行

强调:

  • 如果在循环中已经执行了break语句,就不会执行循环体中位于break后的语句。
  • 在多层循环中,一个break语句只能向外跳出一层

break可以用在switch case中 也可以用在 for 循环和 while循环中

continue语句的功能:

  • 只能在循环语句中使用,使本次循环结束,即跳过循环体重下面尚未执行的语句,接着进行下次的是否执行循环的判断。

continue可以用在for循环以及 while循环中,但是不建议用在while循环中,不小心容易死循环

for(var i=1;i<=10;i++){  if(i==4){    break;  /*跳出循环体*/  }  print(i);}for(var i=1;i<=10;i++){  if(i==4){    continue;  /*跳过当前循环体 然后循环还会继续执行*/  }  print(i);}



三、集合

1、List里面常用的属性和方法:

常用属性:

  • length 长度
  • reversed 翻转
  • isEmpty 是否为空
  • isNotEmpty 是否不为空

常用方法:

  • add 增加
  • addAll 拼接数组
  • indexOf 查找 传入具体值
  • remove 删除 传入具体值
  • removeAt 删除 传入索引值
  • fillRange 修改
  • insert(index,value); 指定位置插入
  • insertAll(index,list) 指定位置插入List
  • toList() 其他类型转换成List
  • join() List转换成字符串
  • split() 字符串转化成List
List myList=['香蕉','苹果','西瓜'];myList.add('桃子');   //增加数据  增加一个myList.addAll(['桃子','葡萄']);  //拼接数组print(myList);print(myList.indexOf('苹x果'));    //indexOf查找数据 查找不到返回-1 查找到返回索引值myList.remove('西瓜');myList.removeAt(1);print(myList);

2、Set

用Set最主要的功能就是去除数组重复内容,Set是没有顺序且不能重复的集合,所以不能通过索引去获取值

//List转成Set去重和Set转成ListList myList=['香蕉','苹果','西瓜','香蕉','苹果','香蕉','苹果'];var s=new Set();s.addAll(myList);print(s);print(s.toList());

3、Map

映射(Maps)是无序的键值对

常用属性:

  • keys 获取所有的key值
  • values 获取所有的value值
  • isEmpty 是否为空
  • isNotEmpty 是否不为空

常用方法:

  • remove(key) 删除指定key的数据
  • addAll({...}) 合并映射 给映射内增加属性
  • containsValue 查看映射内的值 返回true/false
Map person={  "name":"张三",  "age":20,  "sex":"男"};person.addAll({  "work":['敲代码','送外卖'],  "height":160});print(person);person.remove("sex");print(person);



4、forEach

List myList=['香蕉','苹果','西瓜'];myList.forEach((v) {  print(v);});

5、for...in

List myList=['香蕉','苹果','西瓜'];for(var item in myList){  print(item);}

5、where

List myList=[1,3,4,5,7,8,9];var f=myList.any((value){   //只要集合里面有满足条件的就返回true         return value>5;      });print(f);

6、any

List myList=[1,3,4,5,7,8,9];var f=myList.any((value){   //只要集合里面有满足条件的就返回true         return value>5;      });print(f);

7、every

List myList=[1,3,4,5,7,8,9];var f=myList.every((value){   //每一个都满足条件返回true  否则返回false         return value>5;      });print(f);

8、map

map返回一个数组

List myList=['香蕉','苹果','西瓜'];var newList = myList.map((v) {    return v * 2;});print(newList);//(香蕉香蕉, 苹果苹果, 西瓜西瓜)