gpt4 book ai didi

ruby-on-rails - 如何使用 Ruby "Right Way!"创建嵌套循环?

转载 作者:数据小太阳 更新时间:2023-10-29 06:38:51 24 4
gpt4 key购买 nike

我正在学习 Ruby,参加了伯克利的 MOOC,并且在其中一些 MOOC 的作业中,我们有一个练习说:

Define a method sum_to_n? which takes an array of integers and an additional integer, n, as arguments and returns true if any two elements in the array of integers sum to n. An empty array should sum to zero by definition.

我已经创建了两个可以完成这项工作的方法,但我对其中任何一个都不满意,因为我认为它们不是用 Ruby 方式编写的。我希望你们中的一些人可以帮助我了解哪种方法是正确的!

我制作的第一个方法在两次迭代中都使用了 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 解决方案。

关于ruby-on-rails - 如何使用 Ruby "Right Way!"创建嵌套循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19371442/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com