Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 推进到二维阵列_Ruby_Arrays_Iteration - Fatal编程技术网

Ruby 推进到二维阵列

Ruby 推进到二维阵列,ruby,arrays,iteration,Ruby,Arrays,Iteration,我正在尝试将一个名称数组推送到一个二维数组中。当二维数组命中4个条目时,添加到数组的下一个位置。例如: groups[0] [ [0] "bobby", [1] "tommy", [2] "johnny", [3] "brian" ] groups[1] [0] "christina", [1] "alex", [2] "larry", [3] "john" ] 这是我试图做的,但它不起作用。我意识到可能有一些内置的ruby函数

我正在尝试将一个名称数组推送到一个二维数组中。当二维数组命中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. 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
对于每个学生,它将查看
中的最后一个条目(这是唯一可能未满的条目),决定是否需要向
添加新的子数组,然后将学生推入最后一个子数组

这就是说,听起来你真正想要的是拿一张名单,把他们分成四组。Ruby已经通过
每个\u片内置了此功能:

the_cohort = %w(bobby tommy johnny brian christina alex larry john)
the_cohort.each_slice(4).to_a
# => [["bobby", "tommy", "johnny", "brian"], ["christina", "alex", "larry", "john"]]

您的算法可以表示为:

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
对于每个学生,它将查看
中的最后一个条目(这是唯一可能未满的条目),决定是否需要向
添加新的子数组,然后将学生推入最后一个子数组

这就是说,听起来你真正想要的是拿一张名单,把他们分成四组。Ruby已经通过
每个\u片内置了此功能:

the_cohort = %w(bobby tommy johnny brian christina alex larry john)
the_cohort.each_slice(4).to_a
# => [["bobby", "tommy", "johnny", "brian"], ["christina", "alex", "larry", "john"]]

您的算法可以表示为:

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
对于每个学生,它将查看
中的最后一个条目(这是唯一可能未满的条目),决定是否需要向
添加新的子数组,然后将学生推入最后一个子数组

这就是说,听起来你真正想要的是拿一张名单,把他们分成四组。Ruby已经通过
每个\u片内置了此功能:

the_cohort = %w(bobby tommy johnny brian christina alex larry john)
the_cohort.each_slice(4).to_a
# => [["bobby", "tommy", "johnny", "brian"], ["christina", "alex", "larry", "john"]]

您的算法可以表示为:

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
对于每个学生,它将查看
中的最后一个条目(这是唯一可能未满的条目),决定是否需要向
添加新的子数组,然后将学生推入最后一个子数组

这就是说,听起来你真正想要的是拿一张名单,把他们分成四组。Ruby已经通过
每个\u片内置了此功能:

the_cohort = %w(bobby tommy johnny brian christina alex larry john)
the_cohort.each_slice(4).to_a
# => [["bobby", "tommy", "johnny", "brian"], ["christina", "alex", "larry", "john"]]

这不是2D数组,Ruby没有这些数组(除非你计算矩阵)。这只是一个数组数组。@ChrisHeald提到的Enumerable#每个_片都是专门为这个任务制作的,但是还有其他方法。这里有一个:
(0…arr.size)。第(4)步。映射{i | arr[i,4]}
。这不是2D数组,Ruby没有这些数组(除非你计算
矩阵
)。这只是一个数组数组。@ChrisHeald提到的Enumerable#每个_片都是专门为这个任务制作的,但是还有其他方法。这里有一个:
(0…arr.size)。第(4)步。映射{i | arr[i,4]}
。这不是2D数组,Ruby没有这些数组(除非你计算
矩阵
)。这只是一个数组数组。@ChrisHeald提到的Enumerable#每个_片都是专门为这个任务制作的,但是还有其他方法。这里有一个:
(0…arr.size)。第(4)步。映射{i | arr[i,4]}
。这不是2D数组,Ruby没有这些数组(除非你计算
矩阵
)。这只是一个数组数组。@ChrisHeald提到的Enumerable#每个_片都是专门为这个任务制作的,但是还有其他方法。这里有一个:
(0…arr.size)。第(4)步。map{i | arr[i,4]}
。谢谢你,groups=[[]]正是我需要做的,因为列表为空,你不能推到它。我知道每个_片,但想在使用内置函数之前“手动”解决问题本身。感谢您花时间解释这两个问题!谢谢,groups=[[]]正是我需要做的,因为列表列表为空,您无法推送它。我知道每个_片,但想在使用内置函数之前“手动”解决问题本身。感谢您花时间解释这两个问题!谢谢,groups=[[]]正是我需要做的,因为列表列表为空,您无法推送它。我知道每个_片,但想在使用内置函数之前“手动”解决问题本身。感谢您花时间解释这两个问题!谢谢,groups=[[]]正是我需要做的,因为列表列表为空,您无法推送它。我知道每个_片,但想在使用内置函数之前“手动”解决问题本身。感谢您花时间解释这两个问题!