假设我在dart中有以下地图:
Map f = {
0 : 0,
1 : 1,
2 : 0,
3 : 1,
4 : 0,
5 : 1
};
是否有飞镖中的某些内容,以便您可以轻松使用地图的反向地图f
?例如,在这种情况下,逆映射f⁻¹[0]
(在数学符号中)应该等于集合0, 2, 4
。
答案 0 :(得分:4)
Map f = {
0 : 0,
1 : 1,
2 : 0,
3 : 1,
4 : 0,
5 : 1
};
main() {
print(f.keys.where((k) => f[k] == 0));
// or
print(new Map.fromIterable(f.values.toSet(),
key: (k) => k,
value: (v) => f.keys.where((k) => f[k] == v)));
}
尝试DartPad
答案 1 :(得分:2)
答案 2 :(得分:2)
如果值是唯一的,那就只是:
Map inverse(Map f) {
return f.map( (k, v) => MapEntry(v, k) );
}
它不会抱怨重复,它会覆盖它们。
答案 3 :(得分:1)
受枪手的回答启发:
Map inverse(Map f) {
Map inverse = {};
f.values.toSet().forEach((y) {
inverse[y] = f.keys.where((x) => f[x] == y).toSet();
});
return inverse;
}