Collections 删除保留顺序的重复数组元素
是否有标准方法可以删除数组中的重复项,但保留顺序 e、 g 我曾经使用Collections 删除保留顺序的重复数组元素,collections,smalltalk,pharo,Collections,Smalltalk,Pharo,是否有标准方法可以删除数组中的重复项,但保留顺序 e、 g 我曾经使用RemovedUpplicates,但显然这是Roassal添加的扩展方法(所以我不能总是使用它) 手写的,最好的解决方案(我有)是 但是有标准的方法吗?我觉得你的解决方案很好。这里还有一个: withoutDuplicates | visited | visited := Set new. ^self select: [:element | (visited includes: element) not
RemovedUpplicates
,但显然这是Roassal添加的扩展方法(所以我不能总是使用它)
手写的,最好的解决方案(我有)是
但是有标准的方法吗?我觉得你的解决方案很好。这里还有一个:
withoutDuplicates
| visited |
visited := Set new.
^self select: [:element |
(visited includes: element) not
ifTrue: [visited add: element];
yourself]
这一个更详细,但使用(仅)一个附加集合:访问的集合。另一方面,OrderedDictionary
有两个内部集合,一个是Dictionary
,另一个是orderedKeys
序列。如果您不关心空间,我建议使用您的解决方案
作为旁白,我想说的是,在这里使用#yourself
有点不寻常。它遵循以下模式:
^boolean ifTrue: [self doThis]; yourself
当boolean
为true
时,会产生副作用(self-doThis
),并且在这两种情况下都以boolean
回答。大多数人会这样写:
boolean ifTrue: [self doThis].
^boolean
但这需要添加一个临时块,因为在我们的例子中,布尔值
指的是表达式(已访问的包含:元素)而不是我们不应该重复的
或…
。。。您可以借此机会在Pharo中实现OrderedSet
与您的相同,但在文本输入方面较短,而不是性能
(#(c a f b c a d c a e f f) collect: [ :e | e -> true ]) asOrderedDictionary keys
(#(a b c b d)collect:[:e | e->true]into:OrderedDictionary new)键
保存一个临时集合。
boolean ifTrue: [self doThis].
^boolean
(#(c a f b c a d c a e f f) collect: [ :e | e -> true ]) asOrderedDictionary keys