在Ruby早期逃避.each {}迭代

Bud*_*Joe 39 ruby iterator loops enumerator

码:

 c = 0  
 items.each { |i|  
   puts i.to_s    
   # if c > 9 escape the each iteration early - and do not repeat  
   c++  
 }  
Run Code Online (Sandbox Code Playgroud)

我想抓住前10个项目,然后离开"每个"循环.

我该如何用?替换注释行?有更好的方法吗?更多Ruby惯用的东西?

nim*_*odm 60

虽然break解决方案有效,但我认为更实用的方法确实适合这个问题.你想要take前10个元素并打印它们,所以试试

items.take(10).each { |i| puts i.to_s }
Run Code Online (Sandbox Code Playgroud)

  • 更短:`put items.take(10)` (15认同)
  • @Sarah:`ri Array#take` (2认同)

Sar*_*els 47

++Ruby中没有运算符.使用doend用于多行块也是惯例.修改您的解决方案会产生:

c = 0  
items.each do |i|  
  puts i.to_s    
  break if c > 9
  c += 1 
end
Run Code Online (Sandbox Code Playgroud)

或者:

items.each_with_index do |i, c|  
  puts i.to_s    
  break if c > 9
end
Run Code Online (Sandbox Code Playgroud)

each_with_index编程红宝石休息,重做,和下一步.

更新: Chuck对范围的回答更像Ruby,而nimrodm使用的答案take更好.


Chu*_*uck 7

break适用于从循环中提早逃避,但它更具惯用性items[0..9].each {|i| puts i}.(如果您所做的只是字面上打印完全没有变化的项目,您可以这样做puts items[0..9].)