这怎么样 ?
def sum_to_n?(array, n)
for i in array
s = n - i
return true if array.include?(s)
end
false # This will be retuned only when no two numbers are found,whose sum is n
end
puts sum_to_n?([1,2,3,4,5], 9)
puts sum_to_n?([1,2,3,4,5], 12)
# >> true
# >> false
简单的代码正在使用Enumerable#find
:
def sum_to_n?(array, n)
!!array.find{|e| array.include?(n-e)}
end
puts sum_to_n?([1,2,3,4,5], 9)
puts sum_to_n?([1,2,3,4,5], 12)
# >> true
# >> false
更新(根据@Łukasz Niemier)
def sum_to_n?(array, n)
array.any? { |num| array.include?(n - num) }
end
puts sum_to_n?([1,2,3,4,5], 9)
puts sum_to_n?([1,2,3,4,5], 12)
# >> true
# >> false
但我会选择Enumerable#find
,因为它会停止迭代,一旦它找到项目,情况并非如此Enumerable#any?
。