Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 在数组上不断迭代_Arrays_Ruby_Iterator_Range - Fatal编程技术网

Arrays 在数组上不断迭代

Arrays 在数组上不断迭代,arrays,ruby,iterator,range,Arrays,Ruby,Iterator,Range,我意识到我的沟通技巧并没有那么出色(我甚至在努力寻找这个问题),所以我让代码说话: easy_as_123 = ("a".."c").to_a 10.times do |j| if j >= easy_as_123.length puts "j is #{j}, letter is #{easy_as_123[j % easy_as_123.length]}" else puts "j is #{j}, letter is #{easy_as_123[j]}"

我意识到我的沟通技巧并没有那么出色(我甚至在努力寻找这个问题),所以我让代码说话:

easy_as_123 = ("a".."c").to_a
10.times do |j|
  if j >= easy_as_123.length
    puts "j is #{j}, letter is #{easy_as_123[j % easy_as_123.length]}"
  else 
    puts "j is #{j}, letter is #{easy_as_123[j]}"
  end
end
有没有一种更优雅、更简洁的解决方案可以在我的[a,b,c]数组上反复迭代

编辑,我发布的代码有效,这正是我想要的结果,但它既不简洁也不美观,有没有更优雅的方法可以达到同样的结果?

是你的朋友。无限循环:

(?a..?c).cycle.with_index do |letter, j|
  puts "j is #{j}, letter is #{letter}"
end
要在10次迭代后中断循环,请执行以下操作:

(?a..?c).cycle.with_index do |letter, j|
  break if j >= 10
  puts "j is #{j}, letter is #{letter}"
end
使用
#take
(归功于@Stefan):

反过来说:

enum = (?a..?c).cycle
10.times do |j|
  puts "j is #{j}, letter is #{enum.next}"
end
#循环

enum = (?a..?c).to_a
10.times do |j|
  puts "j is #{j}, letter is #{enum[j % enum.length]}"
end

评论:

  • 如果
    是冗余的
  • 到a
    是冗余的,可能会枚举范围
    • 是你在这里的朋友。无限循环:

      (?a..?c).cycle.with_index do |letter, j|
        puts "j is #{j}, letter is #{letter}"
      end
      
      要在10次迭代后中断循环,请执行以下操作:

      (?a..?c).cycle.with_index do |letter, j|
        break if j >= 10
        puts "j is #{j}, letter is #{letter}"
      end
      
      使用
      #take
      (归功于@Stefan):

      反过来说:

      enum = (?a..?c).cycle
      10.times do |j|
        puts "j is #{j}, letter is #{enum.next}"
      end
      
      #循环

      enum = (?a..?c).to_a
      10.times do |j|
        puts "j is #{j}, letter is #{enum[j % enum.length]}"
      end
      

      评论:

      • 如果
        是冗余的
      • 到a
        是冗余的,可能会枚举范围

      在新实例中定义无限循环:

      使用
      take
      输出前十次迭代:

      puts enum.take 10 #=> 
      # j is 0, letter is a
      # j is 1, letter is b
      # j is 2, letter is c
      # j is 3, letter is a
      # j is 4, letter is b
      # j is 5, letter is c
      # j is 6, letter is a
      # j is 7, letter is b
      # j is 8, letter is c
      # j is 9, letter is a
      
      或者使用
      时间
      下一步

      10.times { p enum.next } #=>
      # "j is 0, letter is a"
      # "j is 1, letter is b"
      # "j is 2, letter is c"
      # "j is 3, letter is a"
      # "j is 4, letter is b"
      # "j is 5, letter is c"
      # "j is 6, letter is a"
      # "j is 7, letter is b"
      # "j is 8, letter is c"
      # "j is 9, letter is a"
      

      在以下对象的新实例中定义无限循环:

      使用
      take
      输出前十次迭代:

      puts enum.take 10 #=> 
      # j is 0, letter is a
      # j is 1, letter is b
      # j is 2, letter is c
      # j is 3, letter is a
      # j is 4, letter is b
      # j is 5, letter is c
      # j is 6, letter is a
      # j is 7, letter is b
      # j is 8, letter is c
      # j is 9, letter is a
      
      或者使用
      时间
      下一步

      10.times { p enum.next } #=>
      # "j is 0, letter is a"
      # "j is 1, letter is b"
      # "j is 2, letter is c"
      # "j is 3, letter is a"
      # "j is 4, letter is b"
      # "j is 5, letter is c"
      # "j is 6, letter is a"
      # "j is 7, letter is b"
      # "j is 8, letter is c"
      # "j is 9, letter is a"
      

      你所说的
      超过
      是什么意思?无限循环?你所说的
      是什么意思?无穷循环?您还可以通过附加
      take(10)
      来限制迭代,还可以通过附加
      take(10)
      loop来限制迭代,j |
      j+=1
      @mudasobwa更惯用ruby在这种情况下
      块参数的用途是什么?这是
      循环
      内部实现的一个不必要的副作用,它将
      nil
      块参数传递给块,所以索引是第二个变量。另一个选项是
      0.step{| j | y
      loop.with|u index do | | | |
      是比
      j+=1
      @mudasobwa更惯用的ruby,在这种情况下
      块参数的目的是什么?这是
      循环
      内部实现的一个不必要的副作用,它将
      nil
      块参数传递给块,因此索引作为第二个va变量。另一个选项是
      0.step{j|y