Как разбить массив на Ruby - PullRequest
56 голосов
/ 05 августа 2009

В Ruby 1.8.6 у меня есть массив, скажем, 100 000 идентификаторов пользователей, каждый из которых является целым числом. Я хочу выполнить блок кода для этих идентификаторов пользователей, но я хочу сделать это в кусках. Например, я хочу обработать их по 100 одновременно. Как я могу легко добиться этого настолько просто, насколько это возможно?

Я мог бы сделать что-то вроде следующего, но, возможно, есть более простой способ:

a = Array.new
userids.each { |userid|
  a << userid
  if a.length == 100
    # Process chunk
    a = Array.new
  end
}
unless a.empty?
  # Process chunk
end

Ответы [ 2 ]

111 голосов
/ 05 августа 2009

Использование each_slice:

require 'enumerator'
userids.each_slice(100) do |a|
  # do something with a
end
24 голосов
/ 05 августа 2009

Рельсы имеют in_groups_of, который под капотом использует each_slice.

userids.in_groups_of(100){|group|
  //process group
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...