加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-17 02:15:57 所属栏目:百科 来源:网络整理
导读:我有一个包含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,7,8][9,10] 但我希望第一种格式更均匀地分布.我可
我有一个包含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,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,10]

如果件尺寸太大,则用空阵列填充

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

将输出

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读