我遇到了需要使用方法比较数组中两个元素的情况.我发现使用嵌套循环的逻辑非常简单,但这可能不是Ruby的好用.
对于前者 确定数组是否有任何一对等于0的2个数字:
def pairs(array)
i = 0
while i < array.length
y = i + 1
while y < array.length
if array[i] + array[y] == 0
return true
end
y += 1
end
i += 1
end
return false
end
Run Code Online (Sandbox Code Playgroud)
或者,如果我想看看数组中的两个东西是否相同,我将使用相同的逻辑,除了set:if array [i] == to array [y] ...
有人能为这样的问题提供更好的方法吗?
Jör*_*tag 13
通常,您可以将英语规范直接翻译成Ruby.
在第一个问题中,您询问两个元素的任何组合是否增加为零.当你想知道可枚举的任何元素是否为真时使用的方法是Enumerable#any?.如果要处理数组中元素的组合,请使用该方法Array#combination.对于求和,您可以使用Numeric#+或Enumerable#inject,如果您想知道数字是否为零,您可以使用Numeric#zero?.
因此,您的第一个问题的可能实现将是:
ary.combination(2).any? {|pair| pair.inject(:+).zero? }
Run Code Online (Sandbox Code Playgroud)
你的第二个问题可以通过以下方式回答:
ary.combination(2).any? {|a, b| a == b }
Run Code Online (Sandbox Code Playgroud)
在这两种情况下,当然还有其他方法可以做到这一点.例如,在第一种情况下,我们可以观察到两个数字总和为零的唯一方法是,如果一个是另一个的负数.
需要注意的是没有的,通常可以去错在一个循环可以在这里发生的事情.没有off-by-one错误,没有fencepost错误,没有错误的终止条件,没有迭代结束数组,只是因为没有循环.
| 归档时间: |
|
| 查看次数: |
8156 次 |
| 最近记录: |