同时过滤具有2个条件的数组?
Posted
技术标签:
【中文标题】同时过滤具有2个条件的数组?【英文标题】:Filter an Array with 2 conditions at the same time? 【发布时间】:2018-08-24 09:17:52 【问题描述】:我有一个User
模型,它从数据库中下载所有用户,将它们存储在users
数组中并在UITableView
中显示它们。在UITableView
上方,我有一个UISearchBar
以允许用户过滤它们。
搜索有效,但用户有一个usernames_lowercase
和一个displayName
,我希望能够过滤users
数组,对于usernames_lowercase
和displayName
,将其存储在@987654331 @array 然后重新加载/显示结果。我无法弄清楚如何做到这一点......如果它甚至可以用这样的单个数组来做到这一点。
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()
【问题讨论】:
【参考方案1】:使用||
(OR) 运算符指定多个条件。
searchUsers = users.filter
$0.username_lowercase!.prefix(searchText.count) == trimmedSearchWord.lowercased()
|| $0.displayName!.prefix(searchText.count) == searchText
【讨论】:
好吧,我确实尝试过,但不知何故我搞砸了语法,可能是因为它不适合我。但是,是的,它工作得很好!谢谢(再次!:))【参考方案2】:创建另一个用户模型副本并使用 searchText,如下所示:
// self.Copied_User_Model -> 复制的用户模型
// User_Model -> 原始用户模型
self.Copied_User_Model = []
for item in self.Copied_User_Model
if item.user_name.localizedCaseInsensitiveContains(searchText) != false item.display_Name.localizedCaseInsensitiveContains(searchText) != false
self.Copied_User_Model.append(item)
else
self.tableview.reloadData()
if searchText == ""
self.Copied_User_Model = self.User_MOdel
self.tableview.reloadData()
希望对您有所帮助。 谢谢。
【讨论】:
以上是关于同时过滤具有2个条件的数组?的主要内容,如果未能解决你的问题,请参考以下文章