我有两个这样的数组:
var arrayA = ["Mike", "James", "Stacey", "Steve"]
var arrayB = ["Steve", "Gemma", "James", "Lucy"]如您所见,James和Steve匹配,我希望能够从arrayA中删除它们。我该怎么写呢?
发布于 2015-04-14 05:23:59
如下所示:
var arrayA = ["Mike", "James", "Stacey", "Steve"]
var arrayB = ["Steve", "Gemma", "James", "Lucy"]
for word in arrayB {
if let ix = find(arrayA, word) {
arrayA.removeAtIndex(ix)
}
}
// now arrayA is ["Mike", "Stacey"]发布于 2015-04-14 03:03:17
最简单的方法是使用新的Set容器(在Swift 1.2 /Xcode6.3中添加):
var setA = Set(arrayA)
var setB = Set(arrayB)
// Return a set with all values contained in both A and B
let intersection = setA.intersect(setB)
// Return a set with all values in A which are not contained in B
let diff = setA.subtract(setB)如果想要将结果集重新分配给arrayA,只需使用复制构造函数创建一个新实例并将其分配给arrayA
arrayA = Array(intersection)缺点是你必须创建2个新的数据集。请注意,intersect不会改变在其中调用它的实例,它只是返回一个新的集合。
有类似的加、减等方法,你可以看一看
发布于 2015-04-22 23:46:22
我同意Antonio的回答,但是对于小的数组减法,你也可以使用像这样的过滤器闭包:
let res = arrayA.filter { !contains(arrayB, $0) }https://stackoverflow.com/questions/29612968
复制相似问题