做第一个Project Euler问题:将3和5的倍数相加到1到1000之间,我想出了这个(非常简单)
sum = 0
1.upto(999) { |i| sum += i if 0 == i%3 || 0 == i%5 }
sum
Run Code Online (Sandbox Code Playgroud)
但我认为这会有效,但它没有,有人能告诉我我做错了什么,或者为什么它不起作用?
1.upto(999).inject(0) { |sum, i| sum + i if 0 == i%3 || 0 == i%5 }
Run Code Online (Sandbox Code Playgroud)
谢谢!
spi*_*ike 23
inject将块的结果作为第一个参数传递给下一个迭代.nil当您的if语句为false时,您的块将返回,然后将其传回sum.
为了得到正确答案,该块应该在错误时返回当前总和:
1.upto(999).inject(0) { |sum, i| (0 == i%3 || 0 == i%5) ? sum + i : sum }
Run Code Online (Sandbox Code Playgroud)