【发布时间】:2018-05-23 18:54:43
【问题描述】:
我有两个数组
let badContents = ["b1", "b2"]
let things: [Thing] = ...
Thing 有自己的内容,像这样
print(things[0].contents)
// ["g1", "b1", "b2"]
我想做类似下面的事情,我会得到一个 Thing 类型的数组,其元素的内容不与另一个数组 badContents 重叠
func filteredThings() -> [Thing] {
return things.filter({ (thing) -> Bool in {
return // thing.contents and badContents do not share any elements
}()
})
}
因此,我会得到这样的结果
let things = [Thing(name: "1", contents: ["g1", "b2"), Thing(name: "2", contents: ["g1", "g2"])]
let goodThings = filteredThings() // removes Thing named "1" because its contents contain "b2"
for goodThing in goodThings {
print(goodThing.name)
// "2"
}
【问题讨论】:
-
@JoshCaswell 谢谢,但这实际上不是我想做的。主要区别在于我试图获得类型为
[Thing]的结果,该类型的 member 属性 与另一个数组相当。如果我的badContents的类型为[Thing],则链接的问题可能会起作用 -
@rdk:在您的过滤方法中,您要检查 "thing.contents 和 badContents 是否不共享任何元素" - 换句话说,如果这两个数组没有共同的元素。因此,上面的链接应该有助于找到解决方案。
-
@MartinR 谢谢!我现在知道如何在我的解决方案中使用它!
-
请将您的解决方案作为答案发布,并将其标记为已接受。附:
arrayOfCommonElements是一个非常糟糕的 O(N^2) 解决方案
标签: arrays swift filter filtering