Ph中的高性能Python集合

2024-09-29 23:25:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我尽量避免在这里改头换面。我想确认哪些高性能python集合在Pharo中是最接近的:

保持元素插入顺序的字典:

  • Python:OrderedDict
  • 法罗:有序字典(在官方图像中找到)

(defaultdict可用于使用多个键创建树):

d[key1][key2][key3] = value

双端队列(Deque):支持从两端添加和删除元素

我的假设正确吗? 是否有另一个集合子类可以更好地替代上述情况?在


Tags: httpsorg元素docs字典队列htmllibrary
1条回答
网友
1楼 · 发布于 2024-09-29 23:25:35

这个问题有两个不同的答案。一个简短,另一个更详细。在

简短的回答是肯定的,你的假设是正确的,Count是{},OrderedDict是{},等等

一个更详细的答案至少应该包括一些例子。在

Bag

这是一个无序的集合,可以跟踪重复(又称为occurrences

bag := Bag new.
bag add: 'Hello'; add: 3; add: 'Hello'.
self
  assert: (bag occurrencesOf: 'Hello') = 2;
  assert: (bag occurrencesOf: 3) = 1;
  assert: (bag occurrencesOf: 'foo') = 0

不熟悉Bag的人有使用Dictionary来计算重复次数的倾向。这不是必需的,Bags正是以这种方式实现的,因此不需要重新实现这些集合。在

{{cda}与cda的区别。虽然两者都是无序的,但后者只保留同一实例的一个条目:

^{pr2}$

同时

bag := Bag new.
bag add: 3; add: 3.
bag asArray = #(3 3)

有序字典

一个Dictionary和一个OrderedDictionary之间的区别在于前者是无序的,而后者则记住加法的顺序。因此,它们也表现为OrderedCollections,只是在本例中,键是隐式的索引12,等等(回想一下索引在Smalltalk中总是基于1)的。我们为拥有这两个特性(泛型键和排序)而付出的代价主要是values集合的复制。但是请注意,实现这些对象有不同的选择。在

dictionary := OrderedDictionary new.
dictionary
   at: 'c' put: 'CC';
   at: 'b' put: 'BB';
   at: 'a' put: 'AA'.
dictionary asArray = #('CC' 'BB' 'AA')

然而

dictionary := Dictionary new.
dictionary
   at: 'c' put: 'CC';
   at: 'b' put: 'BB';
   at: 'a' put: 'AA'.
dictionary asArray = #('AA' 'BB' 'CC')

基本上是因为'a' hash < 'b' hash < 'c' hash,因此很容易预见值的内部分配。在

相关问题 更多 >

    热门问题