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))
或其他什么。现在还不清楚你在问什么。