arrays - 在数组内的自定义对象中搜索字典

标签 arrays swift filter

我正在构建搜索功能。我有一个 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/

相关文章:

ios - UserDefaults swift 作为数组检查值是否存在

c++ - 验证是一个数组是另一个数组的子集

ios - 如何使用 if 条件执行正确的代码方法以显示何时点击 1 到 10

Swift Firebase 将数据检索到 TableView 中

javascript - 如何有效地过滤对象的对象?

python - 如何在 Python 中逐行读取文件(或标准输入)而不是等待读取整个文件

arrays - 从特定元素添加的数组中的 Swift 求和数

arrays - Swift - 从类中追加数组时遇到问题

swift - 在 swift Realm 查询中获取线程 1 : EXC_BAD_ACCESS (code=1, 地址=0x11)

c - 在 C 中实现二维卷积的快速方法