arrays - 使用内部数组和另一个数组过滤对象数组

标签 arrays swift

让我们使用以下代码示例来详细说明我的问题:

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/

相关文章:

arrays - Swift - 为什么我不能将一个 Double 数组 append 到另​​一个 Double 数组

c++ - 如何以正确的方式将结构数组参数传递给函数?

ios - Swift - 编辑 PDF QuickLook

Swift:我的 NSTimer 有问题吗?

ios - 使用 Realm Mobile Platform 处理照片

swift - Sprite Kit 的辅助功能(画外音)

javascript - 奇怪的行为 "for in"语句 (NodeJS)

c - 字符串数组初始化

string - 在 Swift 中将字符串从 View Controller 传递到文件

c++ - 表达式必须是带有枚举的可修改左值