gpt4 book ai didi

map - Dart ,一种替换 map 中键和值的好方法吗?

转载 作者:行者123 更新时间:2023-12-03 03:19:03 25 4
gpt4 key购买 nike

我有一个Map,我想同时浏览valueskeys,并用其他某些对象替换满足某些设置条件的特定对象的任何出现,因此,如果我找到了满足特定条件的键。
我想将该键交换为仍指向 map 中相同值对象的另一个对象,类似地,如果我找到要替换的值,我希望原始键指向替换值。
这是一些适用于简化示例的代码,但是看起来很丑陋,有没有更好的方法可以实现此目的,这意味着该方法不需要提取要替换的每个键和值,然后将替换写回在。
能够只对映射进行一次迭代而不是遍历键,然后遍历要替换的所有键和值会更好些?

void main(){
//replace all values of instance A with an Object and all keys starting with "t" with the same key minus the "t"
var m = {
"one": new A(),
"two": new A(),
"three": new B(),
"four": new B()
};
mapKeyAndValueSwapper(m,
keyMeetsCondition: (k) => k.startsWith("t"),
valueMeetsCondition: (v) => v is A,
keyReplacer: (k) => k.replaceFirst("t", ""),
valueReplacer: (v) => new Object());
print(m);
}

mapKeyAndValueSwapper(Map m, {bool keyMeetsCondition(key), bool valueMeetsCondition(value), dynamic keyReplacer(key), dynamic valueReplacer(value)}){
var keysToReplace = [];
var keysToReplaceValuesFor = [];
var keys = m.keys;
keys.forEach((k){
if(keyMeetsCondition != null){
if(keyMeetsCondition(k)){
keysToReplace.add(k);
}
}
if(valueMeetsCondition != null){
if(valueMeetsCondition(m[k])){
keysToReplaceValuesFor.add(k);
}
}
});
keysToReplaceValuesFor.forEach((k){
m[k] = valueReplacer(m[k]);
});
keysToReplace.forEach((k){
m[keyReplacer(k)] = m.remove(k);
});
}

class A{}
class B{}

最佳答案

我认为这样做相同:

  Map newMap = {};
m.forEach((k, v) {
var key = k;
var value = v;
if(m[k] is A) {
value = new Object();
}
if(k.startsWith('t')) {
key = k.replaceFirst('t', '');
}
newMap[key]=value;
});

关于map - Dart ,一种替换 map 中键和值的好方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22610843/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com