swift - [String : [object]] for specific key in object arrays 类型的过滤器字典

标签 swift dictionary

我向用户展示了一个 TableView ,从某种意义上说,它看起来像联系人 View ,因为数据源是 [String: [User]] 类型的字典,所以我用用户的第一个字母展示部分标题姓名。

现在,我想让他们按用户的名字搜索...但我无法让它工作。

这些是字典…… friend 们将保存这样的数据 ["A":[名字以 A 开头的用户]] 等等

var friends = [String: [User]]()
var filteredFriends = [String: [User]]()

这是我的过滤代码,searchText 是我要搜索的名字

self.filteredFriends = self.friends.filter{friend in
return friend.firstName.lowercased().contains(searchText)}

我想做的是让 filteredFriends 拥有用户名以文本开头的 friends 的所有值。

如何使用像我这样的字典来完成这项工作?

谢谢

更多信息:

 Class User {
     var firstName: String?

     init(name: String){
        self.firstName = name
     }
 }

示例场景:

friends = ["A" : [User(name: "Anthony), User(name: "Arnold")], "B" : [User(name: "Barry")]]
filteredFriends = friends

searchText = "an"

所需的过滤好友(最终结果)= ["A": [User(name: "Anthony)]]

最佳答案

没有简单的方法。你只需要循环遍历整个字典,就像这样:

// these are your initial conditions

class User {
    let firstName: String
    init(name: String) {
        self.firstName = name
    }
}
let friends : [String:[User]] = 
    ["A" : [User(name: "Anthony"), User(name: "Arnold")], 
     "B" : [User(name: "Barry")]]
let searchText = "an"

// and here we go...

var filteredFriends = [String:[User]]()
for entry in friends {
    let filt = entry.value.filter{$0.firstName.lowercased().hasPrefix(searchText)}
    if filt.count > 0 {
        filteredFriends[entry.key] = filt
    }
}

现在 filteredFriends 包含所需的结果。

关于swift - [String : [object]] for specific key in object arrays 类型的过滤器字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42279794/

相关文章:

ios - UIAlert 和 View Controller 的错误

swift - String.localizedStringWithFormat 返回错误结果

python - 运行时错误: dictionary changed size during iteration in python

ios - 双击放大/缩小

ios - 在实例化 pageViewController 之前如何运行查询并填充数组

ios - 黑色背景屏幕,同时显示弹出 View ,使用单独的 UIViewController

javascript - 我想通过从网站获取 API 来直接显示 map ,而不使用任何 JS 库

python - 如何遍历字典——一次 n 个键值对

python - 对列表中的字典进行排序,以便按从最高到最低的顺序输出分数

dictionary - 分配给 nil 映射中的条目