我正在构建搜索功能。我有一个 User 对象数组,每个 User 都有一个标签字典。我正在尝试返回具有搜索标签的用户。
我的用户类别是:
class User: NSObject {
var name: String?
var tags = Dictionary<String, String>()
}
标签的一个例子是:
tags: {
“entry1” : “test1”,
“entry2” : “test2”,
“entry3” : “test3”
}
我一直在尝试以下变化:
let predicate = NSPredicate(format: “tags contains[c] %@", “test1”);
let filteredArray = self.usersArray!.filter { predicate.evaluate(with: $0) }; print(“users = ,\(filteredArray)");
它抛出“此类不符合键标记的键值编码”。我不确定如何在 User 对象中搜索。
更新:
我已将字典更改为数组,然后
filter { $0.tags.contains(searchTerm) }
按照建议用于精确搜索匹配。
.filter( {$0.tags.reduce(false, {$1.contains(searchTerm)} )} )
不适用于部分匹配,但这正是我正在寻找的.
这是打印的内容:
Search term: ale
Result: []
Tags array inside each object:
["Alex", "Will", ""]
["Bob", "Dan", ""]
["First", "Second", "Third"]
["Testing 1", "Testing 2", ""]
最佳答案
您的标签实现看起来很麻烦。这是一个更简单的。
class User {
var name: String
var tags: [String]
}
现在假设您在 users
中有一组用户。
var users: [User]
// Store users in the array
现在,这就是您检查哪个用户包含特定标签的方式。
let tag = "yourTag"
users.filter( { $0.tags.contains(tag) } )
但是,如果您坚持需要字典中的标签,那么您可以这样做,
users.filter( {$0.tags.values.contains(tag)} )
如果你想检查标签是否是特定用户中任何标签的部分,你可以这样做,
let filteredUsers = users.filter( {$0.tags.reduce(false, {$1.contains(tag)} )} )
P.S - 我们不在 Swift 中使用 ;
。
关于arrays - 在数组内的自定义对象中搜索字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53843756/