【问题标题】:How to pair-wise compare two arrays in Ruby?如何成对比较Ruby中的两个数组?
【发布时间】:2021-09-30 07:59:00
【问题描述】:

我正在寻找一种方法来比较两个数组,考虑到它们元素的位置,并根据该比较创建一个新数组。

例如:

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"

有什么优雅的方法可以实现吗?

【问题讨论】:

    标签: arrays ruby compare


    【解决方案1】:

    您可以使用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"]
    

    pair.include?("1") 检查该对是否包含"1"。如果是,则其结果为"1",否则为"99"。 (使用ternary operator

    您也可以分别检查每个值:

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

    【讨论】:

      猜你喜欢
      • 2020-02-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-02
      • 1970-01-01
      相关资源
      最近更新 更多