Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Collections 删除保留顺序的重复数组元素_Collections_Smalltalk_Pharo - Fatal编程技术网

Collections 删除保留顺序的重复数组元素

Collections 删除保留顺序的重复数组元素,collections,smalltalk,pharo,Collections,Smalltalk,Pharo,是否有标准方法可以删除数组中的重复项,但保留顺序 e、 g 我曾经使用RemovedUpplicates,但显然这是Roassal添加的扩展方法(所以我不能总是使用它) 手写的,最好的解决方案(我有)是 但是有标准的方法吗?我觉得你的解决方案很好。这里还有一个: withoutDuplicates | visited | visited := Set new. ^self select: [:element | (visited includes: element) not

是否有标准方法可以删除数组中的重复项,但保留顺序

e、 g

我曾经使用
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