【问题标题】:Syntax for a for loop in rubyruby 中 for 循环的语法
【发布时间】:2010-01-09 09:01:09
【问题描述】:

如何在 Ruby 中执行这种类型的 for 循环?

for(int i=0; i<array.length; i++) {

}

【问题讨论】:

  • @johannes 看书是个好主意,但最好不要看 Ruby 1.6!
  • 别忘了看看ruby-doc: Enumerable module中一些有用的方法。

标签: ruby syntax


【解决方案1】:
array.each do |element|
  element.do_stuff
end

或

for element in array do
  element.do_stuff
end

如果你需要索引,你可以使用这个:

array.each_with_index do |element,index|
  element.do_stuff(index)
end

【讨论】:

  • 我一直在寻找专门用于循环索引的方法,但这些解决方案中没有一个可以立即明确如何做到这一点。操作人员在代码中使用 array.length 出卖了他的意图...
  • 仔细阅读我的回答。有一个包含索引的循环解决方案。
  • 很多时候,each 很棒。但有时我只想要一个该死的传统 for 循环。有时,“Ruby 方式”可能很烦人。
  • 如何在 ruby​​ 中手动设置索引,以便我自己编写排序
  • 如果我想跳过接下来的两次迭代怎么办
【解决方案2】:
limit = array.length;
for counter in 0..limit
 --- make some actions ---
end

另一种方法如下

3.times do |n|
  puts n;
end

这将打印 0、1、2,因此也可以像数组迭代器一样使用

认为该变体更适合作者的需求

【讨论】:

    【解决方案3】:

    我一直把它作为谷歌“ruby for loop”的顶部链接,所以我想为步骤不是简单的“1”的循环添加一个解决方案。对于这些情况,您可以使用 Numerics 和 Date 对象上存在的“step”方法。我认为这是“for”循环的近似值。

    start = Date.new(2013,06,30)
    stop = Date.new(2011,06,30)
    # step back in time over two years, one week at a time
    start.step(stop, -7).each do |d| 
        puts d
    end
    

    【讨论】:

      【解决方案4】:

      等价于

      for i in (0...array.size)
      end
      

      或

      (0...array.size).each do |i|
      end
      

      或

      i = 0
      while i < array.size do
         array[i]
         i = i + 1 # where you may freely set i to any value
      end
      

      【讨论】:

        【解决方案5】:
        array.each_index do |i|
          ...
        end
        

        这不是很 Rubyish,但它是在 Ruby 中从 question 中执行 for 循环的最佳方法

        【讨论】:

        • 这太棒了。确实,答案不是each,而是each_index。 +1
        【解决方案6】:

        要将循环迭代固定次数,请尝试:

        n.times do
          #Something to be done n times
        end
        

        【讨论】:

          【解决方案7】:

          如果您不需要访问您的数组,(只是一个简单的 for 循环)您可以使用 upto 或每个:

          至:

          2.upto(4) {|i| puts i}
          2
          3
          4 
          

          每个:

          (2..4).each {|i| puts i}
          2
          3
          4
          

          【讨论】:

            【解决方案8】:

            什么?从 2010 年开始,没有人提到 Ruby 有一个很好的 for /in 循环(只是没有人使用它):

            ar = [1,2,3,4,5,6]
            for item in ar
              puts item
            end
            

            【讨论】:

            • .each...do 的一个优点是块临时在循环结束时超出范围,而 for...in 将临时保留在范围内。
            【解决方案9】:
            ['foo', 'bar', 'baz'].each_with_index {|j, i| puts "#{i} #{j}"}
            

            【讨论】:

              【解决方案10】:

              Ruby 的枚举循环语法不同:

              collection.each do |item|
              ...
              end
              

              这读作“对数组对象实例 'collection' 的 'each' 方法的调用,该方法以 'blockargument' 作为参数的块”。对于单行语句,Ruby 中的块语法是 'do ... end' 或 '{ ... }'。

              方块参数'|item|'是可选的,但如果提供,第一个参数会自动表示循环的枚举项。

              【讨论】:

                猜你喜欢
                • 2016-04-18
                • 2018-02-23
                • 1970-01-01
                • 1970-01-01
                • 2014-05-30
                • 2011-08-29
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多