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

时间:2018-01-31 11:41:17

标签: ios arrays for-loop swift3 append

我的第一个数组是

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

答案 0 :(得分:1)

一个简单的解决方案

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"}

答案 1 :(得分:0)

你可以试试这个:

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]

答案 2 :(得分:0)

如果你想要字符串数组而不是任何字符串。你可以试试这个

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"]