4

我有三个要相交的数组,但我想忽略那些为空的数组。

这段代码似乎太冗长了。有没有更有效的方法?

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]将您的数组放入一个数组中。第二位 with在每个元素上reject运行empty?,如果结果为真则拒绝它,返回一个数组数组,其中删除了空数组。最后一部分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 回答