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"); }
默认自动生成一个匿名函数 当你调用 List.forEach
方法时,它默认会接受一个匿名函数,匿名函数的参数是列表中的每个元素。例如:
void main() { Listnumbers = [1, 2, 3, 4, 5]; // 默认使用匿名函数遍历每个元素 numbers.forEach((number) { print(number); }); }
在这个例子中,forEach
为每个元素执行了匿名函数。匿名函数的参数 number
就是列表中的每个元素。
可以手动传入一个单参数的函数名 你也可以手动传入一个函数名,前提是这个函数需要接受一个参数,参数的类型应与列表元素的类型匹配。例如:
void printElement(int number) { print(number); } void main() { Listnumbers = [1, 2, 3, 4, 5]; // 手动传入一个单参数的函数名 numbers.forEach(printElement); }
在这个例子中,forEach
会为每个元素调用 printElement
函数,printElement
函数接收一个 number
参数,并将其打印出来。
List.forEach
默认接受一个匿名函数,这个匿名函数有一个参数,表示当前列表中的元素。
你也可以传递一个单参数的函数名,只要这个函数能够接受一个参数(与列表元素类型匹配)。
所以你的描述是正确的,List.forEach
默认使用匿名函数,但你也可以传入一个函数名,前提是该函数接受一个参数。
默认自动生成一个 2个参数的匿名函数
可以手动传入一个2个参数的函数名
在 Dart 中,Map.forEach
是一种遍历 Map
集合的方式,它接受一个带有两个参数(key
和 value
)的函数。通常情况下,Map.forEach
会默认生成一个匿名函数来处理每个键值对。但是,你也可以手动传入一个已经定义好的函数,而不是匿名函数。
我们可以通过 Map.forEach
遍历 Map
,并传入一个已经定义好的函数来替代匿名函数。这个函数应该接受两个参数:一个是键(key
),另一个是值(value
)。在函数体中,我们可以根据这些值执行相关操作。
// 定义一个处理 Map 的函数,接受两个参数:key 和 value void printKeyValue(String key, String value) { print("键:$key, 值:$value"); } void main() { // 创建一个 Map Mapmap = { 'name': 'Alice', 'age': '30', 'city': 'New York' }; // 使用 Map.forEach 并传入一个已定义的函数 map.forEach(printKeyValue); }
键:name, 值:Alice 键:age, 值:30 键:city, 值:New York
在这段代码中,我们定义了一个 printKeyValue
函数,它接受两个参数:key
和 value
,并输出它们。
然后,我们创建了一个 Map
,其中包含了三个键值对。
map.forEach(printKeyValue)
通过 forEach
方法遍历 Map
,并将每一个键值对传递给 printKeyValue
函数。
由于 Map.forEach
需要两个参数(key
和 value
),所以 printKeyValue
函数完全符合这种格式,从而顺利执行。
bool类型==和!=和if和else if判断
bool类型可以赋值true真和false假
== 判断是否相等,如果相等返回ture
!= 运算符,跟==相反,判断是否不相等
if判断,()表达式里面是ture,就执行第一个{}里面的内容,如果为false就执行else的内容
else if ,如果if()表达式判断为真,不会执行else if,如果if()判断为假,才会继续进行else if的判断.else if 可以连续多个
以下是去掉注释符号后的完整代码,并且每一段代码后都附上运行结果与讲解。
bool
类型的赋值main() { bool r = true; r = false; print(r); }
false
变量 r
被赋值为 true
,然后又被赋值为 false
。
使用 print(r)
输出了 r
的值,结果为 false
。
==
判断是否相等r = (1 == 1); print(r);
true
1 == 1
判断结果为 true
,因此 r
被赋值为 true
。
使用 print(r)
输出了 r
的值,结果为 true
。
!=
判断是否不相等r = (1 != 1); print(r);
false
1 != 1
判断结果为 false
,因此 r
被赋值为 false
。
使用 print(r)
输出了 r
的值,结果为 false
。
if
判断语句if (1 != 1) { print("真"); } else { print("假"); }
假
1 != 1
的判断结果为 false
,因此 else
语句中的 print("假")
被执行。
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 == 3
为 true
。