如何在Smalltalk中复制最多n个集合元素?

时间:2017-01-24 15:52:29

标签: collections smalltalk

是否有优雅的单行内容可以复制集合中最多n个元素?

我发现编写以下繁琐内容:

limit := collection size min: n.
copy := collection copyTo: limit

有更好的方法吗?

编辑 - 还有一个更难的问题:最多复制 last n个元素

3 个答案:

答案 0 :(得分:6)

还有流消息:

'foobar' readStream next: 3.
'foobar' readStream next: 10.

在Squeak / Pharo中使用next:,当没有可用的元素时,它会自动截断。

其他方言如大众& Dolphin使用更明确的nextAvailable:来避免错误。

答案 1 :(得分:5)

不确定是否已经存在完全符合他的方法,但您可以添加一个:

SequenceableCollection>>#copyAtMost: n
   ^ self first: (self size min: n)

然后你可以:

collection := 1 to: 100.
collection copyAtMost: 101

答案 2 :(得分:5)

没有专门的信息,但为什么不呢:

aCollection first: (aCollection size min: n)

aCollection last: (aCollection size min: n)