2016-03-03 40 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"]!) })