2

配列内の 2 つの数値の合計がゼロかどうかをチェックする関数を作成しようとしています。

[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
4

6 に答える 6

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
于 2013-10-08T00:34:50.673 に答える
1

それを行う簡単な方法は次のとおりです。

def zero_sum?(arr)
  arr.count(0) > 1 or
  arr.-([0]).any?{|e| arr.include?(-e)}
end
于 2013-10-08T00:41:53.767 に答える