如何迭代数组指定次数?

8
array = [apple, orange]    
number = 4

期望输出:

apple    
orange    
apple    
orange

到目前为止,我已经:

array.each do |x|
  puts x
end

我不确定如何对数组进行四次迭代。

5个回答

8
array = ["apple", "orange"]
iter_count = 4
array.cycle.take(iter_count).each { |x|
  puts x
}
array.cycle会返回一个无限的可枚举对象,其中重复了array中的元素。然后我们从中取出前iter_count个元素并进行迭代。 Enumerable有很多好用的功能,可以执行像这样的有趣任务。一旦熟悉了该模块,您将发现可以更轻松地执行许多面向数组和流的处理。

1
这很有趣,但当Ruby已经有times方法时,它似乎过于复杂。还有几点需要注意:1)您提到了numOfIteration,但在您的代码片段中找不到它。2)array.cycle返回一个枚举器实例。 - Sagar Pandya

4
ar = ["apple", "orange"]
n = 4
n.times { ar.each{|a| p a} }

更简单的写法是 4.times { puts array } - Sagar Pandya
2
这不完全是所需的。你的代码将输出8行,但只需要4行。 - mikdiet
@MikDiet 是的,我不确定,因为问题说“在数组上迭代4次”,但示例输出显示迭代了2次。所以我进行了一些解释。 - Les Nightingill

2
array = ["apple", "orange"]
numOfIteration=4
for i in 0..numOfIteration-1
   puts array[i%array.size]
end

2
这是相当不符合惯例的 Ruby 代码。通常不建议使用 for 循环,我们还使用 snake_case 命名变量。所以在你的情况下应该是 num_of_iterations。尽管如此,这段代码确实可以工作并且是一个有效的答案 :) - Sagar Pandya
1
这是真的,萨加尔,但它仍然是语言的一部分。 - Gregory Ostermayr

1
一种有趣的实现方式是:
4.times { |n| p array[n % array.count] }

绝对不是最好的方法:每次迭代我们都要计算数组中元素的数量,并且还要处理n是否可被元素数量整除。而且这种写法也不太易读,需要一些认知处理才能理解语句。

更好的实现方式:

print(arr.cycle.take(4).join("\n"))
apple
orange
apple
orange

puts arr.cycle.take(4) 产生相同的输出。 - steenslag

0
另一个非习语化的循环,3个点去除了对显式减法的需求。
array = ['apple', 'orange']
number = 4

for i in 0...number
  puts array[i % array.size]
end

还有一些关于lambda和递归的愚蠢 :D

array = ['apple', 'orange']
number = 4

loop = lambda do |list, count|
  return if count == number

  puts list[count % list.size]

  loop.(list, count + 1)
end

loop.(array, 0)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接