如果一个元素已经存在于集合中,我们如何检查 pharo

How do we check in pharo if an element already exist in a set

假设我有一个函数,可以在每次刷新后不断地向集合中添加一个随机数。

Myfunction
|list length data |

z := Set new.
x := 8.
data:= received data after each refresh.
length := data size.
1 to: length do:[:k | list := data at: k.
    list < x
    "How to check if this data already exist and not add"
        ifTrue:[z add: list]

如果号码已经存在,我如何才能在 Pharo 中检查,如果已经存在,则不应再次添加?

集合和其他基本集合是常见 Smalltalk 的一部分。您应该查看 Smalltalk 文档(例如Smalltalk bluebook),尤其是您尝试使用的每种数据类型以及其他相关数据类型的参考资料.

如果您阅读 Set 的文档,您会发现一条消息 #includes: 如果参数在集合中,则 return 为真,return 为假如果不是的话。看起来像:

(z includes: list) ifTrue: [ z add: list ]

但是,Set 根据定义包含唯一元素。因此,如果您尝试添加一个已经在集合中的元素,Smalltalk 将不会再次添加它并且在您尝试这样做时不会给您一个错误。因此您无需检查集合是否已包含 list。您可以添加它。

那么您正在以漫长而艰难的方式进行数据遍历。您不需要获取长度然后循环从 1 到该长度的索引。我假设您的数据是某种 Smalltalk Collection,因此您可以只使用 #do: 消息。 #do: 消息允许您在集合的每个元素上迭代一个块:

data do: [ :each | each < x ifTrue: [ z add: each ] ]

这将替换您从 length := ... 开始显示的所有内容。