dart中的逆映射
假设我在dart中有以下地图:dart中的逆映射,dart,Dart,假设我在dart中有以下地图: Map f = { 0 : 0, 1 : 1, 2 : 0, 3 : 1, 4 : 0, 5 : 1 }; dart中有什么东西可以让您轻松地使用地图的逆地图f?例如,逆映射f⁻在这种情况下,1[0](数学表示法)应等于集合0,2,4。Map f={ 0 : 0, 1 : 1, 2 : 0, 3 : 1, 4 : 0, 5 : 1 }; main(){ 打印(f.键,其中((k)=>f[k]==0)); //或 打印(新映射.fromI
Map f = {
0 : 0,
1 : 1,
2 : 0,
3 : 1,
4 : 0,
5 : 1
};
dart中有什么东西可以让您轻松地使用地图的逆地图f
?例如,逆映射f⁻在这种情况下,1[0]
(数学表示法)应等于集合0,2,4
。Map f={
0 : 0,
1 : 1,
2 : 0,
3 : 1,
4 : 0,
5 : 1
};
main(){
打印(f.键,其中((k)=>f[k]==0));
//或
打印(新映射.fromIterable(f.values.toSet(),
键:(k)=>k,
值:(v)=>f.keys.其中((k)=>f[k]==v));
}
尝试一下受冈特答案启发的:
Map inverse(Map f) {
Map inverse = {};
f.values.toSet().forEach((y) {
inverse[y] = f.keys.where((x) => f[x] == y).toSet();
});
return inverse;
}
quiver.dart库中也有这个类(尽管仅仅为了这个目的而使用库可能有些过分)
是该类的一个实际使用示例。如果值是唯一的,则它只是:
Map inverse(Map f) {
return f.map( (k, v) => MapEntry(v, k) );
}
它不会抱怨重复,而是覆盖它们。或者只是
var inverse={};f、 forEach((k,v){inverse.putIfAbsent(v,()=>newset()).add(k);}