Ruby 将数组元素分布到块中的有效方法

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]。因此这里有两个完全

给定一个长度为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]。

因此这里有两个完全不同的用例,一个是必须构建长度为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)的意思是获取数组并将项目分配到两个插槽中(