我有一个关于Ruby循环的基本问题。
该程序以书面形式返回第i个素数+1(即该示例应返回17)。我知道我可以简单地返回cand-1
,但我想知道检查在while
循环底部是否找到答案的“Ruby方式”是什么,只有在没有的情况下才会递增。
def ith_prime(i)
pI = 0 # primes index
divs = []
cand = 2
until pI == i do
if divs.find { |div| cand%div == 0 } == nil
divs << cand
pI += 1
end
cand += 1
end
cand
end
puts ith_prime(7)
> 18
答案 0 :(得分:5)
我大部分时间都使用loop
代替while
或until
。这样我可以将退出条件放在循环中的任何位置。
我会这样写(如果我理解正确的话):
def ith_prime(i)
pI = 0 # primes index
divs = []
cand = 2
loop do
unless divs.find { |div| cand%div == 0 }
divs << cand
pI += 1
end
break if pI == i
cand += 1
end
cand
end