代码之家  ›  专栏  ›  技术社区  ›  Kanav Batra

Swift 3-比较两个长度不等的数组,并在其中附加占位符值以使它们相等

  •  1
  • Kanav Batra  · 技术社区  · 7 年前

    我的第一个数组是

    arr1 = [1, 2, 3, 4 , 5]
    

    我的第二个数组是

    arr2 = [2, 3, 4]
    

    我想比较arr1和arr2,并输出第三个数组

    arr3 = ["No match", 2, 3, 4, "No match"]
    

    所以我在arr1和arr2不匹配的索引处添加了一个占位符值。Arr1和arr2并不总是被排序。

    在Swift 3中,我该怎么做?无法想出一个可行的循环:/

    3 回复  |  直到 7 年前
        1
  •  1
  •   Akhil    7 年前

    一个简单的解决方案是

    let arr1 = [1,2,3,4,5,6]
    let arr2 = [2,3,4]
    
    var arr3 = [String]()
    for value in arr1{
    
        if arr2.contains(value){
            arr3.append("\(value)")
        } else {
            arr3.append("No Match")
        }
    }
    

    单线解决方案是

    let results = arr1.map {arr2.contains($0) ? "\($0)" : "No Match"}
    
        2
  •  0
  •   Madhur    7 年前

    您可以尝试以下操作:

    let arr1 = [1,2,7,3,4,5]
    
    let arr2 = [2,3,4,7]
    
    var arr3 = [Any]()
    var count = Int()
    
    let sortedArr1 = arr1.sorted()
    let sortedArr2 = arr2.sorted()
    
    let arrCount1 = sortedArr1.count
    let arrCount2 = sortedArr2.count
    
    if arrCount1 > arrCount2 {
         count = arrCount1
    }else {
         count = arrCount2
    }
    
    for i in 0..<count {
         if sortedArr2.contains(sortedArr1[i]){
              arr3.append(sortedArr1[i])
         }else {
              arr3.append("Not Matched")
         }
    }
    

    打印输出阵列时,它将为您提供所需的结果:

    print(arr3) //Outputs :["Not Matched", 2, 3, 4, "Not Matched", 7]
    

    或者单行代码如下所示:

    let arr3 = sortedArr1.map {sortedArr2.contains($0) ? "\($0)" : "Not Matched"}
    print(arr3) //Outputs :["Not Matched", 2, 3, 4, "Not Matched", 7]
    
        3
  •  0
  •   adarshaU    7 年前

    如果需要字符串数组而不是any。你可以试试这个

    let arr1 = [1, 2, 3, 4 , 5]
    let arr2 = [2, 3, 4]
    
    let test = arr1.map{
        (item) -> String in
    
        if arr2.contains(item){
            return "\(item)"
        }else{
            return "No match"
        }
    }
    print(test)//["No match", "2", "3", "4", "No match"]