zip関数
zip関数は、複数の配列やイテレータをとり、それらを同時に反復するイテレータを作成して返します。
複数の配列をイテレータを同時に反復したい場合に使います。
例えば配列の要素と同時に、インデックスも同時に得たいという場合、zipを使えば次のように書けます。
values: ["a", "b", "c", "d", "e"]; zip(100.times, values){ |index, value| println(%f[index=%s, value=%s](index, value)); }
出力は次の通り
index=0, value=a index=1, value=b index=2, value=c index=3, value=d index=4, value=e
100.times は0〜100を反復するイテレータを返します。
zipに渡したイテレータや配列のうち、一番短いイテレータが終了すれば、zipが返すイテレータも終了します。
ちなみに、Iteratorクラスのインスタンスメソッドとして、元のイテレータの第一ブロック引数にインデックスを付加する「with_index」が定義されており、上の例は次のように書けます。
values: ["a", "b", "c", "d", "e"]; values.each.with_index{ |index, value| println(%f[index=%s, value=%s](index, value)); }