如何用NSPredicate基于数组过滤Realm Results列表?
解决Realm基于数组过滤Results的问题
嗨,刚好我之前也碰到过类似的需求,你的问题出在Predicate的操作符用错啦!
你原来用的CONTAINS是用来判断单个字符串是否包含某个子串的,而我们现在要做的是判断peopleID是否存在于一个字符串数组里,这时候应该用IN操作符——它专门用来检查属性值是否属于给定的集合(数组、Set都可以)。
直接把你的过滤代码改成下面这样就可以正常工作了:
list = list.filter(NSPredicate(format: "peopleID IN %@", peopleObjectId))
额外小提示:
- 确保
userData里的peopleID属性类型和peopleObjectId数组的元素类型完全一致(都是String),不然会出现匹配失败的情况哦。 - 如果你的
peopleObjectId数组里有重复值,可以先转成Set再传入,这样能减少Realm的查询匹配次数,稍微提升一点效率:let idSet = Set(peopleObjectId) list = list.filter(NSPredicate(format: "peopleID IN %@", idSet))
内容的提问来源于stack exchange,提问作者david
相关产品推荐
相关产品推荐

