簡體   English   中英

比較兩個不同數組中的值

[英]Compare the values in two different arrays

我正在嘗試比較 Swift 中兩個數組的值。 如果值array2中沒有找到array1所有的array2中找到的值必須是列表中刪除。

我試圖使用下面的代碼,但它在 Swift 2 中不再工作了:

let array1 = [["aaa","12"],["bbb","349"],["ccc","91"],["ddd","143"]]
let array2 = ["aaa","SSS","bbb","ccc","QQQ","ZZZ","ddd"]

let notNeededValues = filter(enumerate(zip(array1,array2))) { $1.0 == $1.1 }.map{ $0.0 }

print(notNeededValues)

不確定我是否正確理解您的問題,但問題似乎是,您的代碼需要簡單地轉換為 Swift 2 語法:

let array1 = [["aaa","12"],["bbb","349"],["ccc","91"],["ddd","143"]]
let array2 = ["aaa","SSS","bbb","ccc","QQQ","ZZZ","ddd"]

let notNeededValues = zip(array1, array2).enumerate().filter { $1.0 == $1.1 }.map { $0.0 }

print(notNeededValues)

Swift 正在遠離全局定義的函數,比如曾經的filterenumerate ,而是使用點語法。 協議擴展使此更改成為可能,並使代碼更具可讀性。


更新:

我想這就是你的意思(?):

let notNeededValues = array2.filter { !array1.map { $0[0] }.contains($0) }

// or like this:
let array1FirstElements = array1.map { $0[0] }
let notNeededValues = array2.filter { !array1FirstElements.contains($0) }

這個怎么樣:

let array1 = [["aaa","12"],["bbb","349"],["ccc","91"],["ddd","143"]]
let array2 = ["aaa","SSS","bbb","ccc","QQQ","ZZZ","ddd"]

extension Array where Element: Equatable {
    func removeObject(object: Element) -> [Element] {
        return filter {$0 != object}
    }
}

var filteredArray2 = array2.reduce(array2) {
    if array1.flatMap({$0}).contains($1) {
        return $0.removeObject($1)
    }
    return $0
}

print(filteredArray2)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM