在Ruby中查找数组中两个数字的每个组合的总和

时间:2013-10-08 00:28:59

标签: ruby arrays

我正在尝试创建一个函数来检查数组中的两个数字是否为零。

[1,2,3,4,5] => false
[1,2,3,-2,5] => true

这是我到目前为止所得到的,但我无法弄清楚:

def zero_sum?(arr)

  arr.each do |num|
    arr.each do |num2|
      if (num.to_i + num2.to_i) == 0
        true
      else
        false
      end
    end
  end

end

6 个答案:

答案 0 :(得分:3)

您想知道2个元素的任意组合是否合计为零。你几乎可以逐字写下来:

arr.combination(2).any? {|a, b| (a + b).zero? }

答案 1 :(得分:2)

您需要return true而不是true

这样,当需要时,块中的值为true,但循环继续,最后each返回arr

此外,可写得更短,但效率不高:

def zero_sum?(arr)
  arr.product(arr).any? { |x, y| x + y == 0 }
end

有点不太好但有效率:

def zero_sum?(arr)
  arr.product(arr) { |x, y| return true if x + y == 0 }
  false
end

答案 2 :(得分:1)

一种简单的方法是:

def zero_sum?(arr)
  arr.count(0) > 1 or
  arr.-([0]).any?{|e| arr.include?(-e)}
end

答案 3 :(得分:1)

另一种方法: -

array.product(array).any?{|arr| arr.sum.zero?}

答案 4 :(得分:0)

arr.count(0) > 1 or 
  arr.uniq.map(&:abs).group_by(&:to_i).values.map(&:size).max > 0

我真的不认为这是最好的答案,但有人可能会感兴趣。 (在@sawa or之前借用了部分。)

答案 5 :(得分:0)

arr.each_cons(2).select{|array|array.inject(:+) == 0}.count > 0