Петля цикла Ruby всегда пара

У меня есть следующий массив:

a = ['sda', 'sdb', 'sdc', 'sdd']

Теперь я хочу пропустить эти записи, но всегда с двумя элементами. Я делаю это следующим образом:

while b = a.shift(2)
  # b is now ['sda', 'sdb'] or ['sdc', 'sdd']
end

Это как-то неправильно, есть ли лучший способ сделать это? Есть ли способ легко получить что-то вроде [['sda', 'sdb'], ['sdc', 'sdd']]?

Я читал http://www.ruby-doc.org/core-1.9.3/Array.html, но я не нашел что-то полезное...

Ответ 1

Возможно, вы захотите посмотреть Enumerable, который включен в Array.

Вы хотите Enumerable#each_slice, который многократно дает из перечислимого количества заданных элементов (или меньше, если нет что многие в конце):

a = ['sda', 'sdb', 'sdc', 'sdd']
a.each_slice(2) do |b|
    p b
end

Урожайность:

$ ruby slices.rb 
["sda", "sdb"]
["sdc", "sdd"]
$