假设我有一个在每次刷新后不断向集合中添加随机数的函数。
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是否已存在数字,如果已存在,则不应再次添加?
答案 0 :(得分:3)
集合和其他基本集合是常见Smalltalk的一部分。您应该查看Smalltalk文档(例如,Smalltalk bluebook),特别是您尝试使用的每种数据类型的引用以及其他相关数据类型。
如果你阅读了Set
的文档,你会发现一条消息#includes:
,如果参数在集合中,它将返回true,如果不在,则返回false。那看起来像是:
(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 := ...
开始显示的所有内容。