2016-03-03 61 views
0

給定兩個數組斯威夫特:只有appendContentsOf獨特元素

var array1 = [['id':0], ['id':1], ['id':2], ['id':3]]; 
var array2 = [['id'=3], ['id':4], ['id':5], ['id':6]]; 

我該怎麼做

array1.appendContentsOf(array2) 

因此只有唯一的元素被添加。

電流array1.appendContentsOf(數組2) 導致

[['id':0], ['id":1], ['id':2], ['id':3], ['id':3], ['id':4], ['id':5], ['id':6]] 

其中id:3被複制。

+0

這是什麼?這不是有效的Swift語法。 –

+0

現在好了嗎?儘管您的解決方案對於字典數組無效。 –

+0

我編輯了我的答案。 –

回答

2
let array1 = [0,1,2,3] 
let array2 = [3,4,5,6] 

Array(Set(array1).union(array2)) // [2,4,5,6,0,1,3] 

如果你想要的順序保持不變,你可以測試每個新值,看是否第一個數組中已經包含它:

var array3 = array1 
for element in array2 where !array1.contains(element) { 
    array3.append(element) 
} 
// array3 now is [0,1,2,3,4,5,6] 

或更短:

var array3 = array1 
array3.appendContentsOf(array2.filter { !array1.contains($0) }) 
// array3 now is [0,1,2,3,4,5,6] 

編輯

我不認爲一個字典數組(每個包含寧一個鍵值對)很有意義,但這個工程:

let array1 = [["id": 0], ["id": 1], ["id": 2], ["id": 3]] 
let array2 = [["id": 3], ["id": 4], ["id": 5], ["id": 6]] 

var array3 = array1 
array3.appendContentsOf(array2.filter { !array1.map { $0["id"]! }.contains($0["id"]!) })