2

有没有类似于 Haskell 循环的 Ruby 方法?Haskell 的循环接受一个列表并返回无限附加到自身的列表。它通常与 take 一起使用,它从数组顶部抓取一定数量的元素。是否有一个 Ruby 方法接受一个数组并返回附​​加到自身的数组 n 次?

4

2 回答 2

9

是的,它叫cycle. 从文档中:

数组.循环

(来自红宝石核心)
-------------------------------------------------- ----------------------------
  ary.cycle(n=nil) {|obj| 块 } -> 无
  ary.cycle(n=nil) -> an_enumerator


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

为每个元素重复调用块 n 次,如果没有则永远调用
或给出 nil。如果给定一个非正数或数组为空,则
没有。如果循环结束且没有被中断,则返回 nil。

如果没有给出块,则返回一个枚举器。

  a = [“a”,“b”,“c”]
  a. 循环 {|x| puts x } # print, a, b, c, a, b, c,.. 永远。
  a.cycle(2) {|x| puts x } # print, a, b, c, a, b, c.

编辑:

似乎块内的内容基本上是一个“Lambda”,据我所知,我无法将每个元素都连接到现有数组上。

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 回答