Есть ли эквивалент Array#each_slice() в Ruby 1.8.5?

#ruby #ruby-1.8

#ruby #ruby-1.8

Вопрос:

Я использую ruby 1.8.5, и each_slice() метод для массива не работает.

Мой код выглядит примерно так:

 array.each_slice(3) do |name,age,sex|   .....   end
  

Есть ли какой-либо другой способ реализовать ту же функциональность в моей старой версии ruby.

Комментарии:

1. @железный дровосек: Что было не так с тегом ruby-1.8?

Ответ №1:

Создайте свой собственный:

 module Enumerable
  def each_slice( n )
    res = []
    self.each do |el|
      res << el
      if res.size == n then
        yield res.dup
        res.clear
      end
    end
    yield res.dup unless res.empty?
  end
end
  

Ответ №2:

Этот парень

http://tekhne.wordpress.com/2008/02/01/whence-arrayeach_slice/

выяснил, что вы можете

 require 'enumerator'
  

и это работает

Ответ №3:

У меня нет 1.8.5, но вы можете попробовать это

 0.step(array.size, 3) do |i|
  name, age, sex = array[i], array[i 1], array[i 2]
  ...
end
  

Комментарии:

1. большое вам спасибо за ваш ответ.. В приведенном выше коде, скажем, например, если количество элементов равно 3, это отлично работает в течение одной итерации, но во второй и третьей итерации имя, возраст, пол возвращают nil…

Ответ №4:

Я сам им не пользовался, но подумайте об использовании драгоценного камня backports.