10

次の配列があります。

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

今、これらのエントリをループしたいのですが、常に 2 つの要素があります。私は現時点で次のようにこれを行います:

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を読みましたが、役立つものが見つかりませんでした...

4

2 に答える 2

19

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"]
$
于 2012-05-30T12:21:55.827 に答える