我正在学习Ruby,正在学习Berkeley的MOOC,在一些MOOC的家庭作业中,我们有一个练习,内容是:
定义方法sum_to_n?它接受一个整数数组和一个附加整数n作为参数,并且如果整数数组中的任何两个元素的总和为n,则返回true。根据定义,空数组的总和应为零。
我已经创建了两个可以完成这项工作的方法,但是我对其中任何一个都不满意,因为我认为它们不是用Ruby Way编写的。我希望你们中的一些人可以帮助我学习哪种方法是正确的!
我制作的第一个方法each
在两次迭代中都使用了该方法,但是我对这种方法不满意的是,每个数字都与其他所有数字相加,即使是相同的数字也是如此:
arr[1, 2, 3, 4] => 1+1, 1+2, 1+3, 1+4, 2+1, 2+2, 2+3, 2+4, 3+1, 3+2... 4+3, 4+4
如您所见,有很多重复的和,我不想要那样。
这是代码:
def sum_to_n?(arr, n)
arr.each {|x| arr.each {|y| return true if x + y == n && x != y}}
return true if n == 0 && arr.length == 0
return false
end
用另一种方法,我得到了我想要的东西,只是几笔总和,而无需重复其中的任何一个,甚至不求和相同的数字,但它看起来很可怕,我敢肯定有人会因为这种方式杀死我,但是如您所见,该方法非常出色:
arr[1, 2, 3, 4] => 1+2, 1+3, 1+4, 2+3, 2+4, 3+4
这是代码:
def sum_to_n?(arr, n)
for i in 0..arr.length - 1
k = i + 1
for k in k..arr.length - 1
sum = arr[i] + arr[k]
if sum == n
return true
end
end
end
return true if n == 0 && arr.length == 0
return false
end
好吧,我希望你们能玩得开心,像我尝试过的那样做得更好,更漂亮。
感谢您的帮助。
我会这样写:
def sum_to_n?(arr, n)
return true if arr.empty? && n.zero?
arr.combination(2).any? {|a, b| a + b == n }
end
那似乎是一个相当不错的Rubyish解决方案。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句