2024-09-29 23:25:35 发布
网友
我尽量避免在这里改头换面。我想确认哪些高性能python集合在Pharo中是最接近的:
保持元素插入顺序的字典:
Python:defaultdict: https://docs.python.org/2/library/collections.html#defaultdict-object法罗:zn多值字典?在(defaultdict可用于使用多个键创建树):d[key1][key2][key3] = value 双端队列(Deque):支持从两端添加和删除元素Python:deque(双端队列): https://docs.python.org/2/library/collections.html#deque-objects法罗:有序收集?在我的假设正确吗? 是否有另一个集合子类可以更好地替代上述情况?在
(defaultdict可用于使用多个键创建树):
d[key1][key2][key3] = value
双端队列(Deque):支持从两端添加和删除元素
我的假设正确吗? 是否有另一个集合子类可以更好地替代上述情况?在
这个问题有两个不同的答案。一个简短,另一个更详细。在
简短的回答是肯定的,你的假设是正确的,Count是{},OrderedDict是{},等等
Count
OrderedDict
一个更详细的答案至少应该包括一些例子。在
Bag
这是一个无序的集合,可以跟踪重复(又称为occurrences)
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正是以这种方式实现的,因此不需要重新实现这些集合。在
Dictionary
Bags
{{cda}与cda的区别。虽然两者都是无序的,但后者只保留同一实例的一个条目:
同时
bag := Bag new. bag add: 3; add: 3. bag asArray = #(3 3)
一个Dictionary和一个OrderedDictionary之间的区别在于前者是无序的,而后者则记住加法的顺序。因此,它们也表现为OrderedCollections,只是在本例中,键是隐式的索引1,2,等等(回想一下索引在Smalltalk中总是基于1)的。我们为拥有这两个特性(泛型键和排序)而付出的代价主要是values集合的复制。但是请注意,实现这些对象有不同的选择。在
OrderedDictionary
OrderedCollections
1
2
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,因此很容易预见值的内部分配。在
'a' hash < 'b' hash < 'c' hash
这个问题有两个不同的答案。一个简短,另一个更详细。在
简短的回答是肯定的,你的假设是正确的,},},等等
Count
是{OrderedDict
是{一个更详细的答案至少应该包括一些例子。在
Bag
这是一个无序的集合,可以跟踪重复(又称为
occurrences
)不熟悉
Bag
的人有使用Dictionary
来计算重复次数的倾向。这不是必需的,Bags
正是以这种方式实现的,因此不需要重新实现这些集合。在{{cda}与cda的区别。虽然两者都是无序的,但后者只保留同一实例的一个条目:
^{pr2}$同时
有序字典
一个
Dictionary
和一个OrderedDictionary
之间的区别在于前者是无序的,而后者则记住加法的顺序。因此,它们也表现为OrderedCollections
,只是在本例中,键是隐式的索引1
,2
,等等(回想一下索引在Smalltalk中总是基于1
)的。我们为拥有这两个特性(泛型键和排序)而付出的代价主要是values
集合的复制。但是请注意,实现这些对象有不同的选择。在然而
基本上是因为
'a' hash < 'b' hash < 'c' hash
,因此很容易预见值的内部分配。在相关问题 更多 >
编程相关推荐