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

Posted

技术标签:

【中文标题】Dart 中这个 python 字典的等价物是啥?【英文标题】:What is the equivalent of this python dictionary in Dart?Dart 中这个 python 字典的等价物是什么? 【发布时间】:2017-12-25 05:27:09 【问题描述】:

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

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

【问题讨论】:

【参考方案1】:

您可以使用package:collectionEqualityMap 来定义使用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 = <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。使用元组包

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

【讨论】:

感谢您的回答。您能解释一下为什么使用 const 时可以检索数据吗? 嗯,其实这是个好问题,你可以直接问Dart团队或者比我更有经验的人在gitter上找到答案gitter.im/dart-lang/TALK-general 因为 [1, 'a'] 不是 "==" [1, 'a'] - 它们是不同的对象,但 const 使它们成为同一个对象。【参考方案3】:
  var edges = [1, 'a'] : 2,
               [2, 'a'] : 2,
               [2, '1'] : 3,
               [3, '1'] : 3;

除非您永远无法查找这些键,因为 [1, 'a'] 的新实例将是不同的对象。

【讨论】:

以上是关于Dart 中这个 python 字典的等价物是啥?的主要内容,如果未能解决你的问题,请参考以下文章

Dart/Flutter 中的 TimingLogger 等价物是啥?

python中**是啥意思?

这个 Perl if 条件的 python 等价物是啥?

SQL 中 Python Pandas value_counts 的等价物是啥?

Tomcat 的 Python 等价物是啥?

函数中静态变量的 Python 等价物是啥?