Dart中这个python字典的等价物是什么?
edges = {(1, 'a') : 2,
(2, 'a') : 2,
(2, '1') : 3,
(3, '1') : 3}
答案 0 :(得分:3)
你有不同的方法来做到这一点
var edges = <List, num>{
[1, 'a']: 2,
[2, 'a']: 2,
[2, '1']: 3,
[3, '1']: 3
};
编写简单,但您无法使用
检索数据edges[[2, 'a']]; // null
除非您使用const
var edges = const <List, num>{
const [1, 'a']: 2,
const [2, 'a']: 2,
const [2, '1']: 3,
const [3, '1']: 3
};
edges[const [2, 'a']]; // 2
https://pub.dartlang.org/packages/tuple
var edges = <Tuple2<num, String>, num>{
new Tuple2(1, 'a'): 2,
new Tuple2(2, 'a'): 2,
new Tuple2(2, '1'): 3,
new Tuple2(3, '1'): 3
}
edges[new Tuple2(2, 'a')]; // 2
答案 1 :(得分:2)
您可以使用package:collection
的{{3}}来定义使用ListEquality
的自定义哈希算法。例如,您可以这样做:
var map = new EqualityMap.from(const ListEquality(), {
[1, 'a']: 2,
[2, 'a']: 2,
});
assert(map[[1, 'a']] == map[[1, 'a']])
这将是Map的重量级实现。
答案 2 :(得分:1)
var edges = {[1, 'a'] : 2,
[2, 'a'] : 2,
[2, '1'] : 3,
[3, '1'] : 3};
除非您无法查找这些密钥,因为[1, 'a']
的新实例将是另一个对象。