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

假设我在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));
//或
打印(新映射.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);}