如何以“正确的方式”用Ruby创建嵌套循环?

大卫·戈麦斯

我正在学习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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何以正确的方式创建路线?

来自分类Dev

如何创建正确的嵌套循环?

来自分类Dev

Kotlin:如何以功能方式编写嵌套循环?

来自分类Dev

如何以惯用方式在Scala中创建嵌套的toSet?

来自分类Dev

如何以正确的方式创建分片队列管?

来自分类Dev

如何以通用方式遍历嵌套对象

来自分类Dev

如何以正确的方式清除动画

来自分类Dev

如何以正确的方式从EditText获得双倍?

来自分类Dev

如何以正确的方式准备陈述?

来自分类Dev

如何以编程方式正确移动对象?

来自分类Dev

如何以正确的方式构建CMakeLists?

来自分类Dev

如何以正确的方式发布cUrl请求?

来自分类Dev

如何以正确的方式检索数组?

来自分类Dev

如何以正确的方式准备陈述?

来自分类Dev

如何以正确的方式使用开关盒?

来自分类Dev

如何以正确的方式编写条件语句

来自分类Dev

如何以正确的方式投射 void** 指针?

来自分类Dev

如何以正确的方式运行承诺

来自分类Dev

如何以正确的方式更新对象值

来自分类Dev

如何以正确的方式用UEFI重新安装Ubuntu?

来自分类Dev

如何以正确的方式用UEFI重新安装Ubuntu?

来自分类Dev

如何以正确的方式为独立的python应用程序创建setup.py?

来自分类Dev

如何以正确的方式创建诸如图表之类的社交图标以提高响应能力

来自分类Dev

如何以交互方式运行Ruby脚本

来自分类Dev

如何正确使用嵌套循环

来自分类Dev

如何以编程方式创建dijit TextBox?

来自分类Dev

如何以编程方式创建Google帐户?

来自分类Dev

如何以编程方式创建Func <>委托

来自分类Dev

如何以编程方式创建BasicHttpBinding?

Related 相关文章

热门标签

归档