组合两个数组a1
和a2
a1 = [nil, 1, nil, 1, 1, 2]
a2 = [nil, nil, 2, 2, 1, 2]
所以合并的结果是
[nil, 1, 2, nil, 1, 2]
如果没有if
声明,有没有办法做到这一点?
规则是:
a1[n]
之一,a2[n]
为nil
,则结果为a1[n] || a2[n]
not nil
则:
a1[n] == a2[n]
结果为a1[n]
a1[n] != a2[n]
结果为nil
答案 0 :(得分:1)
a1.zip(a2).map { |x, y| [x || y] == [x, y].uniq.compact ? (x || y) : nil }
答案 1 :(得分:0)
我相信我的答案解决了这个问题,因为它表达的要求和标题(" ......与OR-like运算符")。
a1 = [nil, 1, nil, 1, 1, 2]
a2 = [nil, nil, 2, 2, 1, 2]
[a1, a2].transpose.map {|x1,x2| (x1.nil? || x2.nil? || (x1==x2) || nil) && (x1 || x2)}
#=> [nil, 1, 2, nil, 1, 2]
当
x1 = 1
x2 = 2
我们计算
(x1.nil? || x2.nil? || (x1==x2) || nil) && (x1 || x2)
#=> (false || false || false || nil) && (x1 || x2)
#=> nil && (x1 || x2)
#=> nil
在所有其他情况下,我们获得
true && (x1 || x2)
#=> x1 || x2
所以
nil || nil #=> nil
1 || nil #=> 1
nil || 2 #=> 2
1 || 1 #=> 1
2 || 2 #=> 2