假设我有一张地图:
Map<String, int> source = {'a':1, 'b':2, 'c':3};
我想得到这个:
Map<String, int> expected = {'a': 1, 'b':4, 'c':9 };
我想使用map函数实现结果:
Map<String,int> actual = source.map((key,value)=> {key: value * value});
但是,我收到此错误:
The return type 'Map<String, int>' isn't a 'MapEntry<String, int>', as required by the closure's context
我们不能使用map的map函数来获取另一张这样的地图吗?
答案 0 :(得分:2)
由于您可以更改键和值,因此映射方法应返回MapEntry实例。因此,您的代码应改为:
void main() {
final source = {'a': 1, 'b': 2, 'c': 3};
final actual = source.map((key, value) => MapEntry(key, value * value));
print(actual); // {a: 1, b: 4, c: 9}
}
答案 1 :(得分:1)
使用collection-for可能比使用Map.map
更直接:
final source = {'a': 1, 'b': 2, 'c': 3};
final actual = {
for (var entry in source.entries)
entry.key: entry.value * entry.value,
};