Dart中这个python字典的等价物是什么?

时间:2017-07-19 19:04:25

标签: dart

Dart中这个python字典的等价物是什么?

edges = {(1, 'a') : 2,
         (2, 'a') : 2,
         (2, '1') : 3,
         (3, '1') : 3}

3 个答案:

答案 0 :(得分:3)

你有不同的方法来做到这一点

1。使用列表

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

2。使用Tuple包

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']的新实例将是另一个对象。