当前位置: 首页 > 面试题库 >

使用数组的Swift Realm过滤器列表属性

龚运乾
2023-03-14
问题内容

我的Realm对象中有此属性

 var tags = List<Tag>()
 "tags": [
        {
            "tagId": "80069",
            "tagName": "A"
        },
        {
            "tagId": "80070",
            "tagName": "B"
        },
        {
            "tagId": "80071",
            "tagName": "C"
        },
        {
            "tagId": "80073",
            "tagName": "D"
        }
    ]

我有一个可以过滤掉标签的视图控制器。

所以我有几个按钮来切换过滤器。我所做的是为每个按钮的过滤器创建一个数组

var filteredList = [String]()

因此,如果我单击按钮A,它将把“ A”追加到filteredList数组,如果我单击按钮B,它将把“ B”追加到filteredList数组,依此类推

目前这是我的过滤谓词

let realmFilteredList = self.realm.objects(MyDTO.self).filter("ANY tags.tagName IN %@", self.filteredList)

但是,上述谓词给我的结果是错误的,因为如果我想过滤属性为“ A,B,C,D”(精确的ABCD)的标签,它将返回给我其他包含A,B,C的标签,或D。

如何在我的搜索谓词中获得带有精确“ A,B,C,D”的标签?

给予的任何帮助都将受到高度赞赏。


问题答案:

使用Realm谓词无法实现目标,因为Realm使用时有很多限制,Predicates并且缺少处理计算属性的能力,但是您可以将这种方式用作工作环境

    let filterList = ["A","B"]
    let realmList = realmInstance?.objects(MyDTO.self)
    let filteredArray = Array(realmList!).filter({Array($0.tags).map({$0.tagName}).sorted().joined().contains(filterList.sorted().joined())})

在这里,Array($0.tags).map({$0.tagName}).sorted().joined()我们得到了标签数组,并使用map将其转换为字符串数组,然后对字符串数组进行排序(这将确保仅关系数组中的TAGS而不是顺序),然​​后将已排序的数组转换为字符串例如,您的tag.tagName数组是[“
B”,“ A”,“ C”],此后,您将获得“ ABC”作为STRING

之后,我们检查STRING是否包含您的filterList.sorted()。joined(),该过程与之前说明的相同

因此,如果您的filterList具有[“ B”,“ C”,“ A”],您将获得“ ABC”

并且我们检查“ ABC”是否包含“ ABC”(如果有的话)是否包含在最终结果中



 类似资料:
  • 问题内容: 我希望有一个人可以帮助我。对于我当前在angular 1.3中的项目,我使用以下列表: 我想获取内容数组中具有ID X的对象。 我使用了此ng-repeat: 当我使用id:1,id:4或id:7时,它可以工作,但不适用于其他id … 有任何想法吗? 编辑 我终于找到了引起问题的原因,我使用的是angular 1.3.0。升级到1.3.11后,它可以正常工作!! 问题答案: 您可以根据

  • 我正在尝试过滤scala中对象列表的列表属性。例如: 用java定义的类 我的过滤器函数返回字符串列表而不是结果列表 UPDATE我想取回listOf中的所有结果,其中每个结果的名称属性被过滤。

  • 过滤字段的列表,每一个成员应该是数组或对象 $data = [ ['id'=>1, 'name'=>'a'], ['id'=>2, 'name'=>'b'], ]; // 两个毫无意义的实例化写法 $list = new FilterableList; $list = new FilterableList($data); // 只保留 name 字段 $list = new Fi

  • 问题内容: 我有一个,我想在一行中过滤掉负值(创建一个没有新数组)而不添加循环。使用Java 8 Lambda表达式是否可能? 在python中,将使用生成器: 是否可以在Java 8中做类似的简洁操作? 问题答案: 是的,您可以通过在数组中创建一个,滤除负片,然后将流转换回数组来实现此目的。这是一个例子: 如果要过滤不是的引用数组,则需要使用采用的方法来获取原始类型的数组作为结果:

  • 问题内容: 我有一组对象,它们只是项目。我还有一个下拉菜单,我希望使用该下拉菜单允许用户按价格或评分进行过滤,但是在页面加载时不应进行过滤。 如何根据当前选择选项映射项目数据以进行过滤? 我有一个笨拙的入门:LINK 问题答案: 首先,您选择的值不明确。它们包含可以对条目进行过滤和排序的值-将它们分开是两个功能,因此将它们分开。 接下来,您需要定义一个自定义过滤器,该过滤器将根据所选的评级过滤数据

  • 问题内容: 如果我有一个对象数组,并且想将Angular模型绑定到基于过滤器的元素之一的属性,该怎么做?我可以用一个具体的例子更好地解释: HTML: 控制器: JSBin:http://jsbin.com/adisax/1/edit 我想将第二个输入过滤为具有’C’等级的主题,但是我不想将模型绑定到该 等级 ;我想将其绑定到等级为“ C”的主题的 标题 。 这可能吗?如果可以,怎么做? 问题答案