让我们使用以下代码示例来详细说明我的问题:
struct exampleObj {
var str: String?
var arr: [String]?
}
let filterArray = ["something1", "ins1", "something2"]
let obj1 = exampleObj(str: "obj1", arr: ["ins2", "ins3"])
let obj2 = exampleObj(str: "obj2", arr: ["ins1", "ins2"])
let obj3 = exampleObj(str: "obj3", arr: ["ins1", "ins4"])
let obj4 = exampleObj(str: "obj4", arr: ["ins3", "ins4"])
var arrayObj = [obj1, obj2, obj3, obj4]
let result = arrayObj.filter { filterArray.contains($0.arr...)} //??? I get lost here, dunno if right approach.
我想做的是通过使用另一个数组 filterArray
来过滤 arrayObj
,从而得到一个只有类型对象的 result
exampleObj
包含 ins1
。
希望我说的很清楚。对这个问题有任何疑问,我在这里。
最佳答案
您需要找到两个数组的值之间存在交集的匹配项。使用集合更容易做到这一点。您还需要处理 arr
是可选的。
let result = arrayObj.filter { !Set(filterArray).intersection($0.arr ?? []).isEmpty }
如果您首先将 filterArray
声明为 Set
,这会更有效。
let filterSet: Set = ["something1", "ins1", "something2"]
let obj1 = exampleObj(str: "obj1", arr: ["ins2", "ins3"])
let obj2 = exampleObj(str: "obj2", arr: ["ins1", "ins2"])
let obj3 = exampleObj(str: "obj3", arr: ["ins1", "ins4"])
let obj4 = exampleObj(str: "obj4", arr: ["ins3", "ins4"])
var arrayObj = [obj1, obj2, obj3, obj4]
let result = arrayObj.filter { !filterSet.intersection($0.arr ?? []).isEmpty }
关于arrays - 使用内部数组和另一个数组过滤对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56584983/