我减少了您的输入样本,因为不需要那么大的样本。您可以从这段代码中插入如何执行您需要的操作:
require 'json'
foo = [
{id: 1, name: 'abs', surname: 'abs'},
{id: 1, name: 'abs', surname: 'abs'},
{id: 1, name: 'abs', surname: 'abs'},
{id: 1, name: 'abs', surname: 'abs'},
]
foo.each_slice(2).with_index(1){ |a, i| a.each{ |h| h[:group] = i } }
puts foo.to_json
# >> [{"id":1,"name":"abs","surname":"abs","group":1},{"id":1,"name":"abs","surname":"abs","group":1},{"id":1,"name":"abs","surname":"abs","group":2},{"id":1,"name":"abs","surname":"abs","group":2}]
为了更易读,它看起来像这样:
puts JSON::pretty_generate(foo)
# >> [
# >> {
# >> "id": 1,
# >> "name": "abs",
# >> "surname": "abs",
# >> "group": 1
# >> },
# >> {
# >> "id": 1,
# >> "name": "abs",
# >> "surname": "abs",
# >> "group": 1
# >> },
# >> {
# >> "id": 1,
# >> "name": "abs",
# >> "surname": "abs",
# >> "group": 2
# >> },
# >> {
# >> "id": 1,
# >> "name": "abs",
# >> "surname": "abs",
# >> "group": 2
# >> }
# >> ]
这是发生了什么:
-
each_slice 将数组分割成 N 大小的块。
pp foo.each_slice(2).to_a
# >> [[{:id=>1, :name=>"abs", :surname=>"abs", :group=>1},
# >> {:id=>1, :name=>"abs", :surname=>"abs", :group=>1}],
# >> [{:id=>1, :name=>"abs", :surname=>"abs", :group=>2},
# >> {:id=>1, :name=>"abs", :surname=>"abs", :group=>2}]]
-
with_index 将递增值添加到传递到块的参数列表中。正在分配给块中的i。
pp foo.each_slice(2).with_index(1).to_a
# >> [[[{:id=>1, :name=>"abs", :surname=>"abs", :group=>1},
# >> {:id=>1, :name=>"abs", :surname=>"abs", :group=>1}],
# >> 1],
# >> [[{:id=>1, :name=>"abs", :surname=>"abs", :group=>2},
# >> {:id=>1, :name=>"abs", :surname=>"abs", :group=>2}],
# >> 2]]