我正在寻找一种方法来比较两个数组,同时考虑它们元素的位置,并基于该比较创建一个新数组。
例如:
arr_1 = [ "1", "1", "99", "1", nil, "", "1", ""]
arr_2 = ["99", "", "99", nil, nil, "", "99", "1"]
arr_result = [ "1", "1", "99", "1", "99", "99", "1", "1"]
arr_result
创建如下:如果在同一位置,任一数组中的一个元素是"1"
,则新数组将在该位置具有"1"
;否则为CCD_ 4。
有什么优雅的方法可以做到这一点吗?
您可以使用zip
以成对的方式组合元素:
arr_1.zip(arr_2)
#=> [["1", "99"], ["1", ""], ["99", "99"], ["1", nil], ...]
然后可以对这些对进行map
-ed至所需输出,例如:
arr_1.zip(arr_2).map { |pair| pair.include?("1") ? "1" : "99" }
#=> ["1", "1", "99", "1", "99", "99", "1", "1"]
CCD_ 7检查该对是否包含CCD_。如果是,则其结果为"1"
,否则为"99"
。(使用三元运算符(
您也可以分别检查每个值:
arr_1.zip(arr_2).map { |a, b| (a == "1" || b == "1") ? "1" : "99" }
#=> ["1", "1", "99", "1", "99", "99", "1", "1"]