Arrays Pharo Smalltalk中索引处的拆分数组
我在这方面遇到了问题:Arrays Pharo Smalltalk中索引处的拆分数组,arrays,oop,split,smalltalk,pharo,Arrays,Oop,Split,Smalltalk,Pharo,我在这方面遇到了问题: Split: lista li := Array new: 30. aux := Array new: 30. j := 0. 1 to: (lista size / 30) ceiling do: [ :i | 1 to: 30 do: [ :k | aux at: k put: (lista at: k + j) ]. j := j + 30. li at: i put: aux ]. ^ li 此命令用于返回相同的列表,但分为30组,每
Split: lista
li := Array new: 30.
aux := Array new: 30.
j := 0.
1 to: (lista size / 30) ceiling do: [ :i |
1 to: 30 do: [ :k | aux at: k put: (lista at: k + j) ].
j := j + 30.
li at: i put: aux ].
^ li
此命令用于返回相同的列表,但分为30组,每组30个。我不知道失败的地方是什么,我已经试着调试了很多次,但它就是不起作用。起初我试着在索引处拆分它,但这太难了
请帮帮我(在评论之后,我想你想要的是
split: lista by: anInteger
| groups j |
groups := OrderedCollection new.
j := 0.
lista withIndexDo: [:element :i | | group |
i // anInteger = 0
ifTrue: [ group := Array new: anInteger.
j := 1 ].
group at: j put: element.
j := j + 1.
(j > anInteger or: [ i = lista size ])
ifTrue: [groups add: group]. ].
^ groups
“失败”到底是什么?请提供错误消息和错误堆栈顶部的前两个方法选择器。为什么是30组30组?这种关于
lista size
的隐含知识是脆弱的。保护(lista size/30)天花板
不会保护所有可能的边缘情况,特别是最后一个块的大小可能小于30,也可能有30多个块…存在一个基本缺陷:包含块的数组aux对于每个块都是相同的对象,在每个外部循环中都会被覆盖,因此最终会得到一个包含30个相同块的列表所有块。如果你能添加一个输入数据和所需输出数据的示例(在较小的数组上),那就太好了。例如,对于输入数组(1234)
和索引2
我希望输出(#(12)#(12)#(12)#(12)#(12)#(12))
或其他什么。现在还不清楚你在问什么。