gpt4 book ai didi

arrays - 同时过滤具有2个条件的数组?

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

我有一个 User 模型,它从数据库下载所有用户,将它们存储在 users 数组中,并在 UITableView 中显示它们。在 UITableView 上方,我有一个 UISearchBar 允许用户通过它们进行过滤。

搜索有效,但用户有一个 usernames_lowercase 和一个 displayName,我希望能够过滤 users 数组,对于 usernames_lowercasedisplayName,将其存储在 searchUsers 数组中,然后重新加载/显示结果。我不知道如何做到这一点......如果它甚至可以用这样的单个数组来做到这一点。

StartNewMessage: UITableViewDelegate, UITableViewDataSource {

var users = [UserModel]()
var searchUsers = [UserModel]()
var searching = false

func numberOfSections(in tableView: UITableView) -> Int {
return 1
}

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if searching {
return searchUsers.count
}
else {
return users.count
}
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "UsersChatTVCell") as! UsersChatTVCell
if searching {
let searchUser = searchUsers[indexPath.row]
cell.user = searchUser
}
else {
let user = users[indexPath.row]
cell.user = user
}
return cell
}
}

extension StartNewMessage: UISearchBarDelegate {

func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
let trimmedSearchWord = searchText.trimmingCharacters(in: CharacterSet.punctuationCharacters)
searchUsers = users.filter({ $0.username_lowercase!.prefix(searchText.count) == trimmedSearchWord.lowercased()})
searchUsers = users.filter({ $0.displayName!.prefix(searchText.count) == searchText}) // doesn't work, basically rewrites the data
print(searchText.lowercased())
searching = true
tableView.reloadData()
}
}

最佳答案

使用||(OR)运算符指定多个条件。

searchUsers = users.filter {
$0.username_lowercase!.prefix(searchText.count) == trimmedSearchWord.lowercased()
|| $0.displayName!.prefix(searchText.count) == searchText
}

关于arrays - 同时过滤具有2个条件的数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52001233/

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