相交的非空数组

时间:2012-11-10 18:04:33

标签: ruby

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

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

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

2 个答案:

答案 0 :(得分:11)

怎么样

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

第一部分[a,b,c]将您的数组放入数组中。 reject的第二位在每个元素上运行empty?,如果结果为true则拒绝它,返回一个数组数组,其中删除了空数组。最后一部分reduce运行相当于你的a & b & c,但由于我们在上一步中丢弃了所有空数组,因此不会得到空结果。

答案 1 :(得分: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]