我正在尝试在 Dart 中的对象上使用“map”方法/函数Map。(我知道,这很拗口,而且很难在谷歌中搜索)。
https://api.flutter.dev/flutter/dart-core/Map/map.html
它本质上就像List.map通过对键和值对应用转换来生成新的 Map。
为什么你可以使用这个?也许您需要重命名Map对象中的某些键。
void main() {
Map myMap={"a":1, "b":2};
print(myMap);
print(myMap.map((k,v) {
k=k+k;
v=v*10;
return {k:v};
// I expect { aa:10,bb:20 }
}));
}
Run Code Online (Sandbox Code Playgroud)
我收到编译错误:
Error: A value of type 'Map<dynamic, dynamic>' can't be returned from a function with return type 'MapEntry<dynamic, dynamic>'.
- 'Map' is from 'dart:core'.
- 'MapEntry' is from 'dart:core'.
return {k:v};
^
Error: Compilation failed.
Run Code Online (Sandbox Code Playgroud)
由于我在网上没有找到任何例子,所以我在这里写下答案。
在上面的代码中,我期望它在 return 语句中获取单独的 Map 项并将它们合并到一个 Map 对象中。但是,它却给出了一个错误。它想要一个MapEntry对象。
所以正确的代码是
void main() {
Map myMap={"a":1, "b":2};
print(myMap);
print(myMap.map((k,v) {
k=k+k;
v=v*10;
return MapEntry(k, v);
}));
print(myMap);
}
Run Code Online (Sandbox Code Playgroud)
此外,控制台输出是
{a: 1, b: 2}
{aa: 10, bb: 20}
{a: 1, b: 2}
Run Code Online (Sandbox Code Playgroud)
注意:我担心(并想知道)修改转换函数中的k和v变量是否会修改原始对象中的任何内容。所以,我查了一下。当键和值是不可变对象(如字符串和数字)时,不会发生任何变化。
相反,如果您有一个可变对象(例如地图),那么它确实会更改该对象。
例如,参见:
void main() {
Map myMap={"a":1, "b":2};
print(myMap);
print(myMap.map((k,v) {
k=k+k;
v=v*10;
return MapEntry(k, v);
}));
print(myMap);
print("======");
Map myMap2={"c":1, "d":{"changed": "no"}};
print(myMap2);
print(myMap2.map((k,v) {
k=k+k+k;
if (k=="ddd") {
v["changed"]="yes";
}
return MapEntry(k, v);
}));
print(myMap2);
}
Run Code Online (Sandbox Code Playgroud)
哪个返回
{a: 1, b: 2}
{aa: 10, bb: 20}
{a: 1, b: 2}
======
{c: 1, d: {changed: no}}
{ccc: 1, ddd: {changed: yes}}
{c: 1, d: {changed: yes}}
Run Code Online (Sandbox Code Playgroud)
请参阅https://dartpad.dev/?id=57382792d2fa7a50566c228678a1d4da&null_safety=true
| 归档时间: |
|
| 查看次数: |
4124 次 |
| 最近记录: |