我想要交叉三个数组,但我想忽略那些空的数组。
这段代码似乎太冗长了。有更有效的方法吗?
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
答案 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]