2012-05-30 5 views
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']]のようなものに簡単にアクセスする方法はありますか?

あなたはArrayに含まれる、代わりにEnumerableで見たいと思うかもしれません...

+1

+1を読んでください。 –

答えて

19

を私はhttp://www.ruby-doc.org/core-1.9.3/Array.htmlを読んで、私は有益な何かを見つけることができませんでした。

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

収量:

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

あなたが望む方法を繰り返し可算から与えられた要素(または最後に多く存在していない場合はそれ以下)の数を出しEnumerable#each_slice、あります

+0

さて、コメントはありません... [Enumerator](http://www.ruby-doc.org/core-1.9.3/Enumerator.html)をチェックしました... –

+0

はい、かなり似ています。 Enumeratorは実際には* Enumerableも含むことに注意してください。 'Enumerator'は物事を列挙するための汎用インターフェースのように考えることができます。 '[1、2、3] .each'や '[' sda '、' sdb '、' sdc '、' sdd ']を呼び出すと、each_slice(2)' -both * 'Enumerator'インスタンスを取得します。インスタンスをさらに操作することができます。 – Ashe

+0

'['sda'、 'sdb'、 'sdc'、 'sdd']のように。each_slice(2).to_a' – steenslag