Ruby 将数组元素分布到块中的有效方法
给定一个长度为N的数组,如何将数组中的元素平均分配到另一个任意长度的数组中 例如,我在一个数组中有3个项目,我希望它均匀地分布在另一个包含9个插槽的数组中Ruby 将数组元素分布到块中的有效方法,ruby,arrays,Ruby,Arrays,给定一个长度为N的数组,如何将数组中的元素平均分配到另一个任意长度的数组中 例如,我在一个数组中有3个项目,我希望它均匀地分布在另一个包含9个插槽的数组中 [1, 2, 3] 应该导致(接近的事情) 但是,如果我有9个项目要分配到长度为2的数组中,那么应该会导致 [[1,2,3,4], [5,6,7,8,9]] 谢谢 注意:结果数组项的位置可能因算法而异,但目的是获得某种程度的均匀分布。在第一个示例中,第0项可以是[1]。在第二个示例中,第0项可能有[1,2,3,4,5]。因此这里有两个完全
[1, 2, 3]
应该导致(接近的事情)
但是,如果我有9个项目要分配到长度为2的数组中,那么应该会导致
[[1,2,3,4], [5,6,7,8,9]]
谢谢
注意:结果数组项的位置可能因算法而异,但目的是获得某种程度的均匀分布。在第一个示例中,第0项可以是[1]。在第二个示例中,第0项可能有[1,2,3,4,5]。因此这里有两个完全不同的用例,一个是必须构建长度为n的数组,另一个是需要拆分为长度为n的数组 这感觉像是一个家庭作业,但我对这两个用例没有足够的了解来了解模式(除非我遗漏了一些重要的东西) 测试用例:
it 'splits on n vals' do
arr = [1,2,3]
expect(chunk(arr, 9)).to eq [[], [], [1], [], [], [2], [], [], [3]]
end
it 'splits on n vals' do
arr = [1,2,3,4,5,6,7,8,9]
expect(chunk(arr,2)).to eq [[1,2,3,4,5],[6,7,8,9]]
end
代码:
def块(arr,num)
如果num
因此这里有两个完全不同的用例,一个是必须构建长度为n的数组,另一个是需要拆分为长度为n的数组
这感觉像是一个家庭作业,但我对这两个用例没有足够的了解来了解模式(除非我遗漏了一些重要的东西)
测试用例:
it 'splits on n vals' do
arr = [1,2,3]
expect(chunk(arr, 9)).to eq [[], [], [1], [], [], [2], [], [], [3]]
end
it 'splits on n vals' do
arr = [1,2,3,4,5,6,7,8,9]
expect(chunk(arr,2)).to eq [[1,2,3,4,5],[6,7,8,9]]
end
代码:
def块(arr,num)
如果num
因此这里有两个完全不同的用例,一个是必须构建长度为n的数组,另一个是需要拆分为长度为n的数组
这感觉像是一个家庭作业,但我对这两个用例没有足够的了解来了解模式(除非我遗漏了一些重要的东西)
测试用例:
it 'splits on n vals' do
arr = [1,2,3]
expect(chunk(arr, 9)).to eq [[], [], [1], [], [], [2], [], [], [3]]
end
it 'splits on n vals' do
arr = [1,2,3,4,5,6,7,8,9]
expect(chunk(arr,2)).to eq [[1,2,3,4,5],[6,7,8,9]]
end
代码:
def块(arr,num)
如果num
因此这里有两个完全不同的用例,一个是必须构建长度为n的数组,另一个是需要拆分为长度为n的数组
这感觉像是一个家庭作业,但我对这两个用例没有足够的了解来了解模式(除非我遗漏了一些重要的东西)
测试用例:
it 'splits on n vals' do
arr = [1,2,3]
expect(chunk(arr, 9)).to eq [[], [], [1], [], [], [2], [], [], [3]]
end
it 'splits on n vals' do
arr = [1,2,3,4,5,6,7,8,9]
expect(chunk(arr,2)).to eq [[1,2,3,4,5],[6,7,8,9]]
end
代码:
def块(arr,num)
如果num
这里有一个简单的方法:
def distribute(arr, slots)
n = arr.size
a = Array.new(slots) { [] }
arr.each_with_index { |e,i| a[i*slots/n] << e }
a
end
distribute([1,2,3], 9)
#=> [[1], [], [], [2], [], [], [3], [], []]
distribute([*(1..9)], 2)
#=> [[1, 2, 3, 4, 5], [6, 7, 8, 9]]
def分发(arr,插槽)
n=阵列尺寸
a=数组.新(插槽){[]}
带索引{e,i | a[i*插槽/n][[1],[],[],[2],[],[],[],[3],[],[],[]
分配([*(1..9)],2)
#=> [[1, 2, 3, 4, 5], [6, 7, 8, 9]]
您可以通过修改
i*slots/n
来更改结果的分发,这里有一个简单的方法:
def distribute(arr, slots)
n = arr.size
a = Array.new(slots) { [] }
arr.each_with_index { |e,i| a[i*slots/n] << e }
a
end
distribute([1,2,3], 9)
#=> [[1], [], [], [2], [], [], [3], [], []]
distribute([*(1..9)], 2)
#=> [[1, 2, 3, 4, 5], [6, 7, 8, 9]]
def分发(arr,插槽)
n=阵列尺寸
a=数组.新(插槽){[]}
带索引{e,i | a[i*插槽/n][[1],[],[],[2],[],[],[],[3],[],[],[]
分配([*(1..9)],2)
#=> [[1, 2, 3, 4, 5], [6, 7, 8, 9]]
您可以通过修改
i*slots/n
来更改结果的分发,这里有一个简单的方法:
def distribute(arr, slots)
n = arr.size
a = Array.new(slots) { [] }
arr.each_with_index { |e,i| a[i*slots/n] << e }
a
end
distribute([1,2,3], 9)
#=> [[1], [], [], [2], [], [], [3], [], []]
distribute([*(1..9)], 2)
#=> [[1, 2, 3, 4, 5], [6, 7, 8, 9]]
def分发(arr,插槽)
n=阵列尺寸
a=数组.新(插槽){[]}
带索引{e,i | a[i*插槽/n][[1],[],[],[2],[],[],[],[3],[],[],[]
分配([*(1..9)],2)
#=> [[1, 2, 3, 4, 5], [6, 7, 8, 9]]
您可以通过修改
i*slots/n
来更改结果的分发,这里有一个简单的方法:
def distribute(arr, slots)
n = arr.size
a = Array.new(slots) { [] }
arr.each_with_index { |e,i| a[i*slots/n] << e }
a
end
distribute([1,2,3], 9)
#=> [[1], [], [], [2], [], [], [3], [], []]
distribute([*(1..9)], 2)
#=> [[1, 2, 3, 4, 5], [6, 7, 8, 9]]
def分发(arr,插槽)
n=阵列尺寸
a=数组.新(插槽){[]}
带索引{e,i | a[i*插槽/n][[1],[],[],[2],[],[],[],[3],[],[],[]
分配([*(1..9)],2)
#=> [[1, 2, 3, 4, 5], [6, 7, 8, 9]]
您可以通过修改
i*slots/n
来更改结果的分布。为什么第一个测试用例的结果将1放在新数组的第二个索引中,而不是零位?为什么第二个将是[[1,2,3,4],[5,6,7,8,9]
而不是[[1,2,3,4,5],[6,7,8,9]]
?好问题。我希望这封便条能为您澄清。第二封信的输入是-[1,2,3,4,5,6,7,8,9]
和n=2
?我想类似的东西会有用:[1,2,3,4,5,6,7,8,9]。slot(2)意思是将数组分配到两个插槽中(长度为2的数组)。为什么第一个测试用例的结果将1放在新数组的第二个索引中而不是零位?为什么第二个将是[[1,2,3,4],[5,6,7,8,9]
而不是[[1,2,3,4,5],[6,7,8,9]
?好问题。我希望注释能为您澄清。第二个测试用例的输入是[1,2,3,4,5,6,7,8,9]
和n=2
?我认为类似的方法会起作用:[1,2,3,4,5,6,7,8,9]。插槽(2)的意思是获取数组并将项目分配到两个插槽中(