gpt4 book ai didi

swift - 我如何有条件地过滤数组

转载 作者:搜寻专家 更新时间:2023-11-01 07:05:28 25 4
gpt4 key购买 nike

我正在尝试按属性值过滤对象数组

      queryDatasource = datasource.filter {
if (!values.users.isEmpty && values.users.contains($0.User.User)) {
return true
}

if (!values.categories.isEmpty && values.categories.contains($0.Category.Category)) {
return true
}

if (!values.priorities.isEmpty && values.priorities.contains($0.Priority.Priority)) {
return true
}

if (!values.statuses.isEmpty && values.statuses.contains($0.Status.Status)) {
return true
}
return false
}

当我只选择一个用户 Sara 时,它按预期工作,我只看到来自 Sara 的结果。
当我选择第二个用户 Mike 时,它仍然按预期工作,只有 MikeSara 结果。

现在,如果我添加一个优先级过滤器 High,它会返回 MikeSara 的所有对象以及具有优先级 的所有对象>高 忽略用户(我得到了用户 Dave 的高优先级对象,这是无意的)

简而言之,我想按User AND Priority AND Category OR Status 进行过滤。如果它在用户过滤器中,它必须匹配

最佳答案

我将逐步得出解决方案,向您展示我是如何到达那里的。

首先,删除所有不必要的 !values.x.isEmpty 检查。如果序列为空,contains(_:) 将始终返回 false,因此我们无需担心。此外,我将从谓词中删除所有不必要的括号:

queryDatasource = datasource.filter {
if values.users.contains($0.User.User) {
return true
}

if values.categories.contains($0.Category.Category) {
return true
}

if values.priorities.contains($0.Priority.Priority) {
return true
}

if values.statuses.contains($0.Status.Status) {
return true
}

return false
}

从这里开始,我们可以更好地将其识别为 操作,因此让我们明确地重写它:

queryDatasource = datasource.filter {
return values.users.contains($0.User.User)
|| values.categories.contains($0.Category.Category)
|| values.priorities.contains($0.Priority.Priority)
|| values.statuses.contains($0.Status.Status)
}

如果我们可以使用or (||),显然我们可以切换到and (&& >):

queryDatasource = datasource.filter {
return values.users.contains($0.User.User)
&& values.categories.contains($0.Category.Category)
&& values.priorities.contains($0.Priority.Priority)
&& values.statuses.contains($0.Status.Status)
}

关于swift - 我如何有条件地过滤数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48330050/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com