Ruby 推进到二维阵列
我正在尝试将一个名称数组推送到一个二维数组中。当二维数组命中4个条目时,添加到数组的下一个位置。例如: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函数
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=[[]]正是我需要做的,因为列表列表为空,您无法推送它。我知道每个_片,但想在使用内置函数之前“手动”解决问题本身。感谢您花时间解释这两个问题!