我需要一种方法,将一个数组拆分为大小大致相同的精确数量的较小array.有人有办法做到这一点吗?

例如

a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13] 
groups = a.method_i_need(3)
groups.inspect
    => [[1,2,3,4,5], [6,7,8,9], [10,11,12,13]]

请注意,这是一个与dividing an array into chunks完全不同的问题,因为a.each_slice(3).to_a将产生5个组(而不是我们希望的3个),最后一个组的大小可能与其他组完全不同:

[[1,2,3], [4,5,6], [7,8,9], [10,11,12], [13]]  # this is NOT desired here.

在这个问题中,预先指定所需的块数,每个块的大小最多相差1.

推荐答案

你在找Enumerable#each_slice

a = [0, 1, 2, 3, 4, 5, 6, 7]
a.each_slice(3) # => #<Enumerator: [0, 1, 2, 3, 4, 5, 6, 7]:each_slice(3)>
a.each_slice(3).to_a # => [[0, 1, 2], [3, 4, 5], [6, 7]]

Ruby-on-rails相关问答推荐

RubyOnRail在测试环境中启动失败

刺激中的Rails 7和 bootstrap 错误-无法解析模块说明符 bootstrap

`ActionController::API` 祖先类在加载后不会更新

Rails:has_many 通过不返回结果

如何为 I18n 设置 raise_on_missing_translations

Rails - Comment.count没有改变1

如何将动态 Ruby 代码嵌入到 Slim 模板中的javascript部分?

使用 RSpec 和 Capybara (Rails) 测试重定向

rails 3:将链接显示为按钮?

如何使用 capistrano deploy 定位特定的提交 SHA

如何将自定义过滤器添加到 Active Admin?

Rails 和 OS X:如何安装 rmagick?

Rails - 获取没有 GET 参数的当前 url

在 Controller 中调用模型方法

验证一个对象是否有一个或多个关联对象

如何在同一个 Rails 控制器操作中处理多个 HTTP 方法

Post.all.map(&:id) 是什么意思?

禁用 JS/Ajax 请求时的 ActionController::InvalidAuthenticityToken

如何在rails中正确使用单选按钮?

为什么 Rails 需要 JavaScript 运行时?