如何在 Smalltalk 中复制最多 n 个集合元素?
How to copy at most n collection elements in Smalltalk?
是否有优雅的一行代码最多复制一个集合中的 n 个元素?
我觉得写下面的东西很麻烦:
limit := collection size min: n.
copy := collection copyTo: limit
有没有更好的方法?
编辑 - 还有一个更难的问题:最多复制 last n 个元素
不确定是否已经有完全符合他的方法,但您可以添加一个:
SequenceableCollection>>#copyAtMost: n
^ self first: (self size min: n)
那么你可以拥有:
collection := 1 to: 100.
collection copyAtMost: 101
没有专门的消息,但为什么没有:
aCollection first: (aCollection size min: n)
和
aCollection last: (aCollection size min: n)
还有流消息:
'foobar' readStream next: 3.
'foobar' readStream next: 10.
在Squeak/Pharo中使用next:
,当没有请求的可用元素时,它会自动截断。
在 VW 和 Dolphin 等其他方言中,使用更明确的 nextAvailable:
以避免错误。
是否有优雅的一行代码最多复制一个集合中的 n 个元素?
我觉得写下面的东西很麻烦:
limit := collection size min: n.
copy := collection copyTo: limit
有没有更好的方法?
编辑 - 还有一个更难的问题:最多复制 last n 个元素
不确定是否已经有完全符合他的方法,但您可以添加一个:
SequenceableCollection>>#copyAtMost: n
^ self first: (self size min: n)
那么你可以拥有:
collection := 1 to: 100.
collection copyAtMost: 101
没有专门的消息,但为什么没有:
aCollection first: (aCollection size min: n)
和
aCollection last: (aCollection size min: n)
还有流消息:
'foobar' readStream next: 3.
'foobar' readStream next: 10.
在Squeak/Pharo中使用next:
,当没有请求的可用元素时,它会自动截断。
在 VW 和 Dolphin 等其他方言中,使用更明确的 nextAvailable:
以避免错误。