我如何用另一个 map2 覆盖 map1,留下 Dart 的 map2 中不可用的键?
How can i override a map1 with another map2 leaving the key which is not available in the map2 in Dart?
我是 flutter/dart 的新手,只有当它们之间存在键匹配时,我才必须用另一张地图替换一张地图,否则请保持第一张地图不变。
这应该像 PHP.
中的 array_replace_recursive() 函数一样工作
这是代码示例:
map1 = {
"t":{
"l":{
"-2":{
"n":"rocky",
"e":"rohit@gmail.com",
"r":"23567"
}
},
"o":{
"xyz":{
"p":"hi",
"x":"cdcbcbk"
}
}
},
"lang":{
"eng":"english",
"spn":"spanish"
}
"sc":{
"math"{
"lb":"30",
"pr":"60"
}
}
}
我必须用
覆盖它
map2 = {
"t":{
"l":{
"-2":{
"n":"rohit",
}
},
},
}
预期输出应该是
finalMap = {
"t":{
"l":{
"-2":{
"n":"rohit",
"e":"rohit@gmail.com",
"r":"23567"
}
},
"o":{
"xyz":{
"p":"hi",
"x":"cdcbcbk"
}
}
},
"lang":{
"eng":"english",
"spn":"spanish"
}
"sc":{
"math"{
"lb":"30",
"pr":"60"
}
}
}
谢谢
检查一次,根据您的规格进行更改
replaceIfSame(Map a,Map b){
b.keys.forEach((k){
if(a.containsKey(k)){
if(a[k] is Map && b[k] is Map){
replaceIfSame(a[k],b[k]);
}
else{
a[k] = b[k];
}
}
});
}
这里 replaceIfSame 是我调用的函数,递归传递地图作为输入。
如果不是这种情况请说明。
干杯!!
我试过下面的方法也给出了相同的结果,但我不确定它是否有效
Map<dynamic, dynamic> mergemap(Map map1, Map map2) {
map2.forEach((k, v) {
if (map1.containsKey(k)) {
if (v.runtimeType != String) {
mergemap(map1[k], v);
} else {
map1[k] = v;
}
}
});
return map1;
}
我是 flutter/dart 的新手,只有当它们之间存在键匹配时,我才必须用另一张地图替换一张地图,否则请保持第一张地图不变。 这应该像 PHP.
中的 array_replace_recursive() 函数一样工作这是代码示例:
map1 = {
"t":{
"l":{
"-2":{
"n":"rocky",
"e":"rohit@gmail.com",
"r":"23567"
}
},
"o":{
"xyz":{
"p":"hi",
"x":"cdcbcbk"
}
}
},
"lang":{
"eng":"english",
"spn":"spanish"
}
"sc":{
"math"{
"lb":"30",
"pr":"60"
}
}
}
我必须用
覆盖它map2 = {
"t":{
"l":{
"-2":{
"n":"rohit",
}
},
},
}
预期输出应该是
finalMap = {
"t":{
"l":{
"-2":{
"n":"rohit",
"e":"rohit@gmail.com",
"r":"23567"
}
},
"o":{
"xyz":{
"p":"hi",
"x":"cdcbcbk"
}
}
},
"lang":{
"eng":"english",
"spn":"spanish"
}
"sc":{
"math"{
"lb":"30",
"pr":"60"
}
}
}
谢谢
检查一次,根据您的规格进行更改
replaceIfSame(Map a,Map b){
b.keys.forEach((k){
if(a.containsKey(k)){
if(a[k] is Map && b[k] is Map){
replaceIfSame(a[k],b[k]);
}
else{
a[k] = b[k];
}
}
});
}
这里 replaceIfSame 是我调用的函数,递归传递地图作为输入。
如果不是这种情况请说明。
干杯!!
我试过下面的方法也给出了相同的结果,但我不确定它是否有效
Map<dynamic, dynamic> mergemap(Map map1, Map map2) {
map2.forEach((k, v) {
if (map1.containsKey(k)) {
if (v.runtimeType != String) {
mergemap(map1[k], v);
} else {
map1[k] = v;
}
}
});
return map1;
}