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 | yloop.with|u index do | | | |
是比j+=1
@mudasobwa更惯用的ruby,在这种情况下
块参数的目的是什么?这是循环内部实现的一个不必要的副作用,它将nil
块参数传递给块,因此索引作为第二个va变量。另一个选项是0.step{j|y