推送到2D阵列

时间:2014-10-29 00:25:50

标签: ruby arrays iteration

我正在尝试将一组名称推送到二维数组中。当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

1 个答案:

答案 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