Sal*_*uel 0 ruby arrays 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]}"
end
end
Run Code Online (Sandbox Code Playgroud)
是否有一个更优雅和简洁的解决方案,以不断迭代我的[a,b,c]数组?
编辑,我发布的代码作品,这正是我正在寻找的结果,但它不简洁也不好看,有没有方法能够以更优雅的方式实现同样的结果?
Enumerable#cycle是你的朋友.无限循环:
(?a..?c).cycle.with_index do |letter, j|
puts "j is #{j}, letter is #{letter}"
end
Run Code Online (Sandbox Code Playgroud)
在10次迭代后打破一个循环:
(?a..?c).cycle.with_index do |letter, j|
break if j >= 10
puts "j is #{j}, letter is #{letter}"
end
Run Code Online (Sandbox Code Playgroud)
使用#take(积分给@Stefan):
(?a..?c).cycle.take(10).each.with_index do |letter, j|
puts "j is #{j}, letter is #{letter}"
end
Run Code Online (Sandbox Code Playgroud)
另一边:
enum = (?a..?c).cycle
10.times do |j|
puts "j is #{j}, letter is #{enum.next}"
end
Run Code Online (Sandbox Code Playgroud)
没有#cycle:
enum = (?a..?c).to_a
10.times do |j|
puts "j is #{j}, letter is #{enum[j % enum.length]}"
end
Run Code Online (Sandbox Code Playgroud)
评论:
if 是多余的;to_a 是冗余的,可能会枚举范围.| 归档时间: |
|
| 查看次数: |
85 次 |
| 最近记录: |