2

Haskellのサイクルに似たRubyメソッドはありますか?Haskellのサイクルはリストを受け取り、そのリストを無限に追加して返します。これは通常、配列の先頭から特定の数の要素を取得するtakeで使用されます。配列を受け取り、それ自体に追加された配列をn回返すRubyメソッドはありますか?

4

2 に答える 2

9

はい、と呼ばれていcycleます。ドキュメントから:

配列サイクル

(ルビーコアより)
-------------------------------------------------- ----------------------------
  ary.cycle(n=nil) {|obj| ブロック} -> nil
  ary.cycle(n=nil) -> an_enumerator


-------------------------------------------------- ----------------------------

各要素のブロックを n 回繰り返し呼び出すか、存在しない場合は永久に呼び出します
または nil が指定されます。正でない数値が指定された場合、または配列が空の場合は、
なし。中断されることなくループが終了した場合は nil を返します。

ブロックが指定されていない場合は、代わりに列挙子が返されます。

  a = ["a", "b", "c"]
  a.cycle {|x| puts x } # print, a, b, c, a, b, c,.. 永久に。
  a.cycle(2) {|x| puts x } # print, a, b, c, a, b, c.

編集:

ブロック内は基本的に「ラムダ」のようです。私が知る限り、各要素を既存の配列に連結するラムダを作成することはできません。

b = [1, 2, 3]
z = []
b.cycle(2) { |i| z << i }
z # => [1, 2, 3, 1, 2, 3]
于 2013-03-06T07:02:01.133 に答える
3

次を使用して、配列に整数を掛けることができますArray#*

ary * int → new_ary

[...] それ以外の場合は、 のintコピーを連結して構築された新しい配列を返しますself

したがって、次のようなことができます。

>> [1, 2] * 3
=> [1, 2, 1, 2, 1, 2]
于 2013-03-06T07:03:57.273 に答える