4

交差させたい配列が3つありますが、空の配列は無視したいと思います。

このコードは冗長すぎるようです。より効率的なアプローチはありますか?

if a.empty? && b.empty?
  abc = c
elsif a.empty? && c.empty?
  abc = b
elsif b.empty? && c.empty?
  abc = a
elsif a.empty?
  abc = b & c
elsif b.empty?
  abc = a & c
elsif c.empty?
  abc = a & b
else
  abc = a & b & c
end
4

2 に答える 2

11

どうですか

abc = [a,b,c].reject(&:empty?).reduce(:&)

最初の部分[a,b,c]は、配列を配列に配置します。の2番目のビットはすべての要素でreject実行empty?され、結果がtrueの場合はそれを拒否し、空の配列が削除された配列の配列を返します。最後の部分reduceは、と同等の機能を実行しますa & b & cが、前の手順ですべての空の配列を破棄したため、結果が空になることはありません。

于 2012-11-10T18:12:02.190 に答える
0

パーティーに少し遅れて...

a = [1,3,4,5]
b = []
c = [2,3,5,6]

t = a | b | c # => [1, 3, 4, 5, 2, 6]
[a,b,c].map {|e| e.empty? ? t : e}.reduce(:&) # => [3, 5]
于 2013-10-19T22:08:53.273 に答える