Запуская событие каждую итерацию дерева - PullRequest
1 голос
/ 22 июня 2011

Я использую Ruby on Rails 3.0.7, и я хотел бы знать, что является обычной практикой \ техникой для итерации массива, состоящего из большого количества данных, и запуска события по трем итерациям. 1003 *

Я могу сделать что-то вроде этого

# "fire_the_event" is a method
count = 0
array.each do |element|
  count += 1

  fire_the_event if count % 3 == 0
end

но есть "лучший" \ "более производительный" способ fire_the_event каждый три раза?

Ответы [ 2 ]

3 голосов
/ 22 июня 2011

Вы можете использовать метод each_slice

array.each_slice(3) do |elements|
  fire_the_event
end
0 голосов
/ 22 июня 2011

Ваш пример кода неполный, так как он не иллюстрирует, что вам действительно нужно.

По сути, ваш код выполняет следующее:

(array.length / 3).times{fire_the_event}

Но я сомневаюсь, что это то, что вы действительноneed.

В любом случае, взгляните на этот вопрос SO: Как выбрать каждый n-й элемент в массиве?

Если вам нужно пройти через каждый элемент,используйте with_index:

array.each_with_index do |element, index|
  # perform something with each element

  # but fire the event only with every third:
  fire_the_event if index % 3 == 0
end
...