将两个数组与OR运算符

时间:2016-12-20 12:34:01

标签: ruby

组合两个数组a1a2

的最佳方法是什么
a1 = [nil, 1, nil, 1, 1, 2]
a2 = [nil, nil, 2, 2, 1, 2]

所以合并的结果是

[nil, 1, 2, nil, 1, 2]

如果没有if声明,有没有办法做到这一点?

规则是:

  1. 如果a1[n]之一,a2[n]nil,则结果为a1[n] || a2[n]
  2. 如果两者都是not nil则:
    • a1[n] == a2[n]结果为a1[n]
    • a1[n] != a2[n]结果为nil

2 个答案:

答案 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