0

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

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,如果存在,它不应该再次添加它?

4

1 回答 1

3

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

如果您阅读文档,Set您会发现一条消息#includes:,如果参数在集合中,则返回 true,否则返回 false。那看起来像:

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

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

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

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

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

于 2018-01-25T21:39:39.070 回答