2015-11-09 65 views
1

我想比較兩個數組在Swift中的值。如果在array1中找不到array2的值,則所有array2找到的值需要列出並刪除。比較兩個不同陣列中的值

我嘗試使用下面的代碼,但它不是在斯威夫特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) 

回答

1

不知道我正確理解你的問題,但這個問題似乎是,你的代碼需要一個簡單的轉換到夫特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) 

夫特從全局定義的函數移動離開,像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) } 
+0

謝謝你的解釋。我的問題是,我需要找到,列出兩個數組中不匹配的值,並從array2中刪除這些值。 – SNos

+0

'array1'是一個數組數組。我只比較第一個值與'array2'中的值嗎? 'array1'的用法是什麼?對我來說,它看起來像一個'[String:String]'(字典)將更適合。 –

+0

是的,只需要比較第一個值。 array1是包含上傳視頻的JSON列表 – SNos

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)