我有一个NSMutableArray
,它本身在里面有很多数组。在每个数组中,在所有索引中,它们还具有下面给出的类的自定义对象。
Class User:NSObject{
var name = ""
var userName = ""
var email = ""
var age = 0
var gender = ""
var
}
我想根据两个对象过滤这个嵌套数组。例如,如果用户在searchBar中键入一些文本,并检查该嵌套数组中的文本是否与名称和/或userName相匹配。
发布于 2016-09-20 21:40:24
let textToSearch:String = "some text"
for nestedArray in myArray {
for item:User in nestedArray
{
if user.name.contains(textToSearch) || user.userName.contains(textToSearch)
{
print("found")
}
}
}
发布于 2016-09-20 22:06:46
let nestedArray: [[User]] = [[user1, user2], [user3], [user4, user5]]
let searchName = "foo"
let filteredArray = nestedArray.map({
return $0.filter({ $0.name == searchName })
}).filter({ $0.count > 0 })
这是一种纯粹的函数式方法,它会产生一个新的嵌套数组,其中只包含具有匹配用户的数组,并且这些数组也将只包含匹配的用户。
发布于 2016-09-20 22:08:34
一些建议
结构更适合于模型值。
struct User {
let name: String
let userName: String
let email: String
let age: Int
let gender: String
}
不要使用NSMutableArray
NSMutableArray
是一个Objective-C类。你可以通过Swift访问它,但是你应该使用Swift数组结构。它速度更快,并且作为一个值类型,可以防止与访问共享对象的代码的多个部分相关的bug。
过滤数据
现在给出一个由User
数组组成的数组
let data: [[User]] = ...
和一个关键字
let keyword: String = ...
你可以过滤你的数据写入
let matchingUsers = data
.flatMap { $0 }
.filter { $0.name.range(of: keyword) != nil || $0.userName.range(of: keyword) != nil }
现在matchingUsers
是一个User(s)
数组,其中name
或username
包含keyword
。
https://stackoverflow.com/questions/39595393
复制相似问题