如何在ruby中成对比较两个数组?

sqserrrh  于 2021-09-29  发布在  Java
关注(0)|答案(1)|浏览(407)

我正在寻找一种方法来比较两个数组,同时考虑它们的元素位置,并基于这种比较创建一个新数组。
例如:

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"` 在那个位置上;否则 `"99"` .
有什么优雅的方法可以做到这一点吗?
2nc8po8w

2nc8po8w1#

你可以用 zip 要以成对方式组合元素,请执行以下操作:

arr_1.zip(arr_2)

# => [["1", "99"], ["1", ""], ["99", "99"], ["1", nil], ...]

然后,这些对就可以 map -输出到所需的输出,例如:

arr_1.zip(arr_2).map { |pair| pair.include?("1") ? "1" : "99" }

# => ["1", "1", "99", "1", "99", "99", "1", "1"]

``` `pair.include?("1")` 检查该对是否包含 `"1"` . 如果是这样,其结果是 `"1"` 及 `"99"` 否则(使用三元运算符)
您还可以分别检查每个值:

arr_1.zip(arr_2).map { |a, b| (a == "1" || b == "1") ? "1" : "99" }

=> ["1", "1", "99", "1", "99", "99", "1", "1"]

相关问题