我正在尝试创建一个函数来检查数组中的两个数字是否为零。
[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
答案 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