我遇到需要使用方法比较数组中的两个元素的情况。我发现仅使用嵌套循环的逻辑就很简单,但这可能不是Ru​​by的好用法。

对于前。确定数组是否有任意两个2等于0的数字:

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

或者,如果我想查看数组中的两件事是否相同,我将使用除set之外的相同逻辑:if array [i] == to array [y] ...

有人可以为这样的问题提供更好的方法吗?

最佳答案

通常,您可以将英语规范直接转换为Ruby。

在第一个问题中,您询问两个元素的任何组合是否为零。当您想知道某个可枚举的任何元素是否为真时使用的方法是 Enumerable#any? 。如果要处理数组中元素的组合,请使用 Array#combination 方法。为了求和,可以使用Numeric#+ Enumerable#inject ,如果想知道数字是否为零,可以使用 Numeric#zero?

因此,第一个问题的可能实现是:

ary.combination(2).any? {|pair| pair.inject(:+).zero? }

您的第二个问题可以这样回答:
ary.combination(2).any? {|a, b| a == b }

在这两种情况下,当然都有其他方法可以做到这一点。例如,在第一种情况下,我们可以观察到两个数字求和为零的唯一方法是一个数字是否为另一个的负数。

请注意,这里通常不会发生任何可能在循环中出错的事情。不会因为没有循环而出现一对一错误,没有栅栏错误,没有错误的终止条件,没有迭代数组的末尾。

关于ruby - 用Ruby比较数组中的两个项目,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33905245/

10-14 17:01
查看更多