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));
  }