首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从基于另一个数组的数组中删除对象

从基于另一个数组的数组中删除对象
EN

Stack Overflow用户
提问于 2015-04-14 02:58:04
回答 6查看 22.4K关注 0票数 43

我有两个这样的数组:

代码语言:javascript
复制
var arrayA = ["Mike", "James", "Stacey", "Steve"]
var arrayB = ["Steve", "Gemma", "James", "Lucy"]

如您所见,JamesSteve匹配,我希望能够从arrayA中删除它们。我该怎么写呢?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2015-04-14 05:23:59

如下所示:

代码语言:javascript
复制
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"]
票数 20
EN

Stack Overflow用户

发布于 2015-04-14 03:03:17

最简单的方法是使用新的Set容器(在Swift 1.2 /Xcode6.3中添加):

代码语言:javascript
复制
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

代码语言:javascript
复制
arrayA = Array(intersection)

缺点是你必须创建2个新的数据集。请注意,intersect不会改变在其中调用它的实例,它只是返回一个新的集合。

有类似的加、减等方法,你可以看一看

票数 38
EN

Stack Overflow用户

发布于 2015-04-22 23:46:22

我同意Antonio的回答,但是对于小的数组减法,你也可以使用像这样的过滤器闭包:

代码语言:javascript
复制
let res = arrayA.filter { !contains(arrayB, $0) }
票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29612968

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档