gpt4 book ai didi

ruby-on-rails - 比 each_slice 更平衡的数组操作?

转载 作者:数据小太阳 更新时间:2023-10-29 07:32:53 29 4
gpt4 key购买 nike

我有一个包含 10 个项目的数组,我想将它分成 3 个部分,如下所示:

[1, 2, 3, 4]
[5, 6, 7]
[8, 9, 10]

使用 each_slice 我可以接近:

a = *(1..10)
a.each_slice(4) # use 4 so I can fit everything into 3 sections

[1, 2, 3, 4]
[5, 6, 7, 8]
[9, 10]

但我想要第一种分布更均匀的格式。我可以编写自己的方法来做到这一点。 但是在 ruby​​ 1.9+ 中是否有内置的方法来做到这一点?

更新:

由于没有内置方法,我想将我的问题更改为 - 您将如何实现它?

最佳答案

这是我的实现

  def chunk(a, pieces)
size = a.size / pieces
extra = a.size % pieces
chunks = []
start = 0

1.upto(pieces) do |i|
last = (i <= extra) ? size.next : size
chunks << a.slice(start, last)
start = chunks.flatten.size
end

chunks
end

这样称呼

a = *(1..10)
puts chunk(a, 3)

会输出

[1, 2, 3, 4]
[5, 6, 7]
[8, 9, 10]

如果 block 太大,它会用空数组填充

a = *(1..10)
puts chunk(a, 14)

会输出

[[1], [2], [3], [4], [5], [6], [7], [8], [9], [10], [], [], [], []]

关于ruby-on-rails - 比 each_slice 更平衡的数组操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7439547/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com