NSPredicate 格式用于检查 2 个数组并过滤这些数组

NSPredicate format for check the 2 array and filter those array

我有一个名为 A 的数组,还有一个名为 B 的领域结果列表。现在我必须根据 A 中包含的值过滤我的 B。这样,我的 B 将只有包含 A 的值对象.

这是我的代码:

var peopleObjectId: [String] = ["1", "2", "4", "6"]
var list  = Results<userData>

我的列表包含关于用户的所有对象。现在通过使用下面的过滤器。我必须提交我的 peopleObjectId 包含的列表值

list = list.filter(NSPredicate(format: "peopleID CONTAINS %@", peopleObjectId))

我知道我不应该直接使用 peopleObjectId。不确定我该如何实现。

任何帮助都会有用。

提前致谢

您可以使用 IN 关键字:

IN

Left hand expression must appear in collection specified by right hand expression. i.e. name IN {‘Milk’, ‘Eggs’, ‘Bread’}

Ref: NSPredicate Cheatsheet

let found = list.filter { (user) in
    NSPredicate(format: "SELF IN %@", peopleObjectId)
        .evaluate(with:user.peopleID)
}

更多阅读 NSPredicate

有时越简单越好,似乎不需要 NSPredicate。

此外,运行 使用 Swift 函数的过滤器不会 return Realm Results 对象,它 return 是一个 LazyFilterSequence,它不是 Realm 集合。所以那些对象无法被观察到并且失去了它们的一些领域性。

如果您在领域中存储了一堆狗并且您想要检索特定的狗,这里是return领域结果对象

的解决方案
var listOfDogsToFind = ["Fido", "Dino", "Sport"]
var results = realm.objects(DogClass.self).filter("dog_name IN %@", listOfDogsToFind)