我正在尝试将一组名称推送到二维数组中。当2D阵列命中4个条目时,添加到阵列的下一个位置。例如:
groups[0]
[
[0] "bobby",
[1] "tommy",
[2] "johnny",
[3] "brian"
]
groups[1]
[0] "christina",
[1] "alex",
[2] "larry",
[3] "john"
]
以下是我试图这样做的方式,而且它不起作用。我意识到可能有一些内置的ruby函数会自动执行此过程,但我想先手动编写它:
def make_group(the_cohort)
y=0
x=1
groups=[]
the_cohort.each do |student|
groups[y].push student
x+=1
y+=1 && x=1 if x==4
end
end
提前致谢。使用ruby 2.1.1p73
答案 0 :(得分:3)
您的算法可以表示为:
1. If the last array in groups has 4 entries, add another array to groups
2. Push the entry into the last array in groups
在代码中:
groups = [[]]
the_cohort.each do |student|
groups.push [] if groups.last.length == 4
groups.last.push student
end
对于每个学生,它会查看groups
中的最后一个条目(这是唯一可能未满的条目),决定是否需要向{{1}添加新的子数组然后将学生推入最后一个子阵列。
那就是说,听起来你真正想要的是取一个名单并将它们分成四个一组。 Ruby已经通过groups
:
each_slice