所以我试图跳过其他所有元素并将它们输入到集合中。然后我将集合转换回数组并尝试返回它。我不知道什么是错的。
altElement
| newColl x y |
newColl:= OrderedCollection new.
x := 1.
[x <= self size ] whileTrue: [x := x + 2 |
newColl add: (self at: x)].
y:= newColl asArray.
^y
答案 0 :(得分:4)
您可能需要#pairsDo:
甚至#pairsCollect:
。
#(1 2 3 4 5 6 7) pairsCollect: [:a :b | b]. "=> #(2 4 6)"
答案 1 :(得分:4)
另一个更多的交叉方言变体是要记住间隔也是集合(我发现这更多功能)。
| sequence |
sequence = #('I' 'invented' 'the' 'term' 'Object' 'Oriented' 'Programming' 'and' 'this' 'is' 'not' 'it').
(1 to: sequence size by: 2) collect: [:n | sequence at: n]
将返回:
#('I' 'the' 'Object' 'Programming' 'this' 'not')
但可以很容易地改变回归
#('invented' 'term' 'Oriented' 'and' 'is' 'it')
只需交换1
的前导2
即可。不过很棒的是,你可以按照自己想要的方式切片。如果您的方言有pairCollect :,则只能将其用于相邻项目。你不能得到从后面开始向后的每个第三个单词:
(sequence size - 1 to: 1 by: -3) collect: [:n | sequence at: n]
"returns"
#('not' 'and' 'Object' 'invented')
我发现使用序列作为collect:
的切片迭代器是一个更有用和通用的模式。