Dart 3.5语法 21-24

021MapEntry键值对String拼接变量和Map下的map方法

022迭代操作的执行和Map的entries.map方法返回迭代操作和List.asMap转换为

MapEntry键值对和Map下的方法map和entries.map返回迭代器和List.asMap转换为Map

MapEntry()创建一个键值对,用来组合Map的,一般用来组合map键值对用

字符串拼接变量,用字符串两边加引号+$变量名,跟打印一样

.map()方法是遍历Map里面的所有键值对,每次遍历把键值分别放到(key,value)中

  • .map()方法是遍历Map里面的所有键值对,每次遍历把键值分别放到(key,value)中

  • 箭头函数=>相当于 { return 一行代码 }

为什么要 return

map() 函数的返回值是一个新的集合,它的元素是通过遍历原集合时对每个元素应用传入的函数得到的。在 map() 的操作中,必须返回一个新的元素来替代原集合中的元素。

  • 由于你正在对一个 Map 进行操作,map() 返回的是一个新的 Iterable。在这个新的 Iterable 中,每个元素都应该是 MapEntry 类型(这是 Map 键值对的封装)。

  • MapEntry(key, str) 创建了一个新的键值对,其中 key 是原来的键,str 是你转换后的值。

entries.map返回一个迭代器,可以是任何类型,这样就可以把Map转换为其他类型的迭代器,再转为数组

List 用asMap()方法转换为Map,调用map方法

 main() {
   //MapEntry()创建一个键值对,用来组合Map的,一般用来组合map键值对用
   //Creates an entry with key and value.MapEntry会创建一个包含键和值的入口
   var mt = MapEntry("age", 18);//前面是键,后面是值
   print(mt);
     //打印出来效果是MapEntry(age, 18)
    
      
   //字符串拼接变量,用字符串两边加引号+$变量名,之前的打印print,就是打印了,拼接后的String
   var i1 = 100;
   String str = "'i1'=$i1";
   print(str);
   //打印出来 'i1'=100
 ​
   var m1 = {"name": "张三", "age": 18};
 // print(m1);
     
     
 //Map.map()方法是遍历Map里面的所有键值对,每次遍历把键值分别放到(key,value)中
     
   //箭头函数=>相当于 { return  一行代码  }
     
   //被map遍历的Map不会改变,但是返回值返回给=左边接受的是新的Map
   //m2是新的Map,m1被map遍历了,但是他自己的值不变
   var m2 = m1.map((key, value) => MapEntry(
       key, "abc123")); // "name":"张三"
     
   print(m1);//{"name": "张三", "age": 18}
   print(m2);//{"name":"abc123",  "age":"abc123"}
     
     
   var m3 = m1.map((key, value) {
     String str = "map遍历执行了:key = $key  value = $value";
     print(str);
     return MapEntry(key, str);
   }); // "name":"张三",   {"name":"abc123",  "age":"abc123"}
    print(m1);
    print(m3);//{"name":map遍历执行了:key = name  value = 张三,age}  ?
 ​
   //entries.map返回一个迭代器,可以是任何类型,这样就可以把Map转换为其他类型的迭代器,再转为数组
     //注意,迭代操作会得到的结果外面是()
   var m4 = {"name": "张三", "age": 18};
 ​
   var it1 = m4.entries.map((e) {
     String str = "遍历中 key=${e.key}: value=${e.value}";
      print(str);
     return str;
   });
     
     
    print(it1);//
   var l1 = it1.toList();
   print(l1);
    for(var item in l1){
         print("item=$item");
    }
   //List 用asMap()方法转换为Map,调用map方法
    var m5 = l1.asMap();
    // print(m5);
 ​
    var l2 = [1,2,3,4,5,"abc"];
     var l3 = l2.asMap().entries.map((e) {
      String str = "key=${e.key}: value=${e.value}";
      return str;
    }).toList();
   print("l3=$l3");
 }
 ​

023List和Map的forEach方法

List.forEach方法

  1. 默认自动生成一个匿名函数 当你调用 List.forEach 方法时,它默认会接受一个匿名函数,匿名函数的参数是列表中的每个元素。例如:

     void main() {
       List numbers = [1, 2, 3, 4, 5];
       
       // 默认使用匿名函数遍历每个元素
       numbers.forEach((number) {
         print(number);
       });
     }

    在这个例子中,forEach 为每个元素执行了匿名函数。匿名函数的参数 number 就是列表中的每个元素。

  2. 可以手动传入一个单参数的函数名 你也可以手动传入一个函数名,前提是这个函数需要接受一个参数,参数的类型应与列表元素的类型匹配。例如:

     void printElement(int number) {
       print(number);
     }
     ​
     void main() {
       List numbers = [1, 2, 3, 4, 5];
       
       // 手动传入一个单参数的函数名
       numbers.forEach(printElement);
     }

    在这个例子中,forEach 会为每个元素调用 printElement 函数,printElement 函数接收一个 number 参数,并将其打印出来。

总结:

  • List.forEach 默认接受一个匿名函数,这个匿名函数有一个参数,表示当前列表中的元素。

  • 你也可以传递一个单参数的函数名,只要这个函数能够接受一个参数(与列表元素类型匹配)。

所以你的描述是正确的,List.forEach 默认使用匿名函数,但你也可以传入一个函数名,前提是该函数接受一个参数。

Map.forEach方法

  • 默认自动生成一个 2个参数的匿名函数

  • 可以手动传入一个2个参数的函数名

在 Dart 中,Map.forEach 是一种遍历 Map 集合的方式,它接受一个带有两个参数(keyvalue)的函数。通常情况下,Map.forEach 会默认生成一个匿名函数来处理每个键值对。但是,你也可以手动传入一个已经定义好的函数,而不是匿名函数。

示例解释

我们可以通过 Map.forEach 遍历 Map,并传入一个已经定义好的函数来替代匿名函数。这个函数应该接受两个参数:一个是键(key),另一个是值(value)。在函数体中,我们可以根据这些值执行相关操作。

示例代码

 // 定义一个处理 Map 的函数,接受两个参数:key 和 value
 void printKeyValue(String key, String value) {
   print("键:$key, 值:$value");
 }
 ​
 void main() {
   // 创建一个 Map
   Map map = {
     'name': 'Alice',
     'age': '30',
     'city': 'New York'
   };
 ​
   // 使用 Map.forEach 并传入一个已定义的函数
   map.forEach(printKeyValue);
 }
运行结果
 键:name, 值:Alice
 键:age, 值:30
 键:city, 值:New York
解释
  • 在这段代码中,我们定义了一个 printKeyValue 函数,它接受两个参数:keyvalue,并输出它们。

  • 然后,我们创建了一个 Map,其中包含了三个键值对。

  • map.forEach(printKeyValue) 通过 forEach 方法遍历 Map,并将每一个键值对传递给 printKeyValue 函数。

  • 由于 Map.forEach 需要两个参数(keyvalue),所以 printKeyValue 函数完全符合这种格式,从而顺利执行。

024bool类型双等号不等号和if和else if判断

bool类型==和!=和if和else if判断

  • bool类型可以赋值true真和false假

  • == 判断是否相等,如果相等返回ture

  • != 运算符,跟==相反,判断是否不相等

  • if判断,()表达式里面是ture,就执行第一个{}里面的内容,如果为false就执行else的内容

  • else if ,如果if()表达式判断为真,不会执行else if,如果if()判断为假,才会继续进行else if的判断.else if 可以连续多个

以下是去掉注释符号后的完整代码,并且每一段代码后都附上运行结果与讲解。

1. bool 类型的赋值

 main() {
   bool r = true;
   r = false;
   print(r);
 }
运行结果
 false
解释
  • 变量 r 被赋值为 true,然后又被赋值为 false

  • 使用 print(r) 输出了 r 的值,结果为 false


2. 使用 == 判断是否相等

 r = (1 == 1);
 print(r);
运行结果
 true
解释
  • 1 == 1 判断结果为 true,因此 r 被赋值为 true

  • 使用 print(r) 输出了 r 的值,结果为 true


3. 使用 != 判断是否不相等

 r = (1 != 1);
 print(r);
运行结果
 false
解释
  • 1 != 1 判断结果为 false,因此 r 被赋值为 false

  • 使用 print(r) 输出了 r 的值,结果为 false


4. if 判断语句

 if (1 != 1) {
   print("真");
 } else {
   print("假");
 }
运行结果
 假
解释
  • 1 != 1 的判断结果为 false,因此 else 语句中的 print("假") 被执行。

5. else if 语句的使用

 if (false) {
   print("真");
 } else if (false) {
   print("2==2");
 } else if (3 == 3) {
   print("3==3");
 }
运行结果
 3==3
解释
  • 第一个 if (false) 判断为 false,跳过该代码块。

  • 第二个 else if (false) 判断也为 false,跳过该代码块。

  • 最后,else if (3 == 3) 判断为 true,因此执行 print("3==3")

综合示例:布尔类型与条件判断

 main() {
   bool r = true;
   r = false;
   
   r = (1 == 1);
   r = (1 != 1);
   
   if (false) {
     print("真");
   } else if (false) {
     print("2==2");
   } else if (3 == 3) {
     print("3==3");
   }
 }
运行结果
 3==3
解释
  • 使用布尔类型赋值,==!= 进行比较。

  • 通过 else if 进行条件判断,输出了 "3==3",因为最后一个条件 3 == 3true

你可能感兴趣的:(Flutter,iOS,应用构建,dart)