Arrays swift中基于匹配值的字典和过滤器迭代数组
我的数据如下所示:Arrays swift中基于匹配值的字典和过滤器迭代数组,arrays,swift,dictionary,filter,matching,Arrays,Swift,Dictionary,Filter,Matching,我的数据如下所示: [["-MXpvzmZdbqzrjND8w9F": { lid = "-MW6eEidZFCLeeZ0uBk1"; message = hi; timeStamp = 1617960107264; title = "Sambhar Dosa"; user = 1QSU0c1q8QNrZzmICXGClC0o86E3; }, "-MXq5NAyrkk4ZcvRFM7T&
[["-MXpvzmZdbqzrjND8w9F": {
lid = "-MW6eEidZFCLeeZ0uBk1";
message = hi;
timeStamp = 1617960107264;
title = "Sambhar Dosa";
user = 1QSU0c1q8QNrZzmICXGClC0o86E3;
}, "-MXq5NAyrkk4ZcvRFM7T": {
lid = "-MW6eEidZFCLeeZ0uBk1";
message = "how ru?";
timeStamp = 1617962828647;
title = "Sambhar Dosa";
user = 1QSU0c1q8QNrZzmICXGClC0o86E3;
}], ["-MXqa5-pkC28lY_Q_hpZ": {
lid = "-MWwEpHAhIdhN0i5sltB";
message = "hi nice cycle";
timeStamp = 1617971142820;
title = "Cycle for kids";
user = 1QSU0c1q8QNrZzmICXGClC0o86E3;
}]]
struct SomeData1
{
let dict: [String: Any]
var lid: String? { dict["lid"] as? String }
var message: String? { dict["message"] as? String }
var timeStamp: Double { dict["timeStamp"] as? Double ?? 0.0 }
var title: String? { dict["title"] as? String }
var user: String? { dict["user"] as? String }
var owner: String? { dict["owner"] as? String }
}
现在,该值由变量testarray定义。仅为方便而给出的名称。
testarray是var testarray=[String:[String:Any]]
内部字典使用结构定义,如下所示:
[["-MXpvzmZdbqzrjND8w9F": {
lid = "-MW6eEidZFCLeeZ0uBk1";
message = hi;
timeStamp = 1617960107264;
title = "Sambhar Dosa";
user = 1QSU0c1q8QNrZzmICXGClC0o86E3;
}, "-MXq5NAyrkk4ZcvRFM7T": {
lid = "-MW6eEidZFCLeeZ0uBk1";
message = "how ru?";
timeStamp = 1617962828647;
title = "Sambhar Dosa";
user = 1QSU0c1q8QNrZzmICXGClC0o86E3;
}], ["-MXqa5-pkC28lY_Q_hpZ": {
lid = "-MWwEpHAhIdhN0i5sltB";
message = "hi nice cycle";
timeStamp = 1617971142820;
title = "Cycle for kids";
user = 1QSU0c1q8QNrZzmICXGClC0o86E3;
}]]
struct SomeData1
{
let dict: [String: Any]
var lid: String? { dict["lid"] as? String }
var message: String? { dict["message"] as? String }
var timeStamp: Double { dict["timeStamp"] as? Double ?? 0.0 }
var title: String? { dict["title"] as? String }
var user: String? { dict["user"] as? String }
var owner: String? { dict["owner"] as? String }
}
因此testarray也可以读作var testarray=[String:[SomeData1]]
现在,根据上述数据,当lid与特定值匹配时,只有这些数据存储在名为dataToDisplay的变量中,该变量定义为var dataToDisplay=SomeData1
我已经用下面的代码过滤了上面的数据
var sortStep1 = self.testArray.map {
dict in dict.map {
($0.key, SomeData1(dict: $0.value))
}.filter {$0.1.lid == self.listid}
}
print("sortStep1 is",sortStep1)
为sortStep1显示的值为
[[(“-MY5aPJ--Xoot_wlGSqS”,Hunger.ChatVC.SomeData1(dict:[“所有者”:bPqDIJvYX7g7ZhE8ap0TgeYMYjE2,“盖子”:-mw6eedzfcleez0ubk1,“用户”:1QSU0c1q8QNrZzmICXGClC0o86E3,“时间戳”:161823966661393,“消息”:hi,“标题”:Sambhar Dosa]),(-MY5b-WT4AoWWa7c1eQT),“Hunger.ChatVC.some1(dict:“标题”:sambdosha-Sambhar,“用户”:sambdosa,“数据产品”,nice”:1QSU0c1q8QNrZzmICXGClC0o86E3,“时间戳”:1618239817904,“盖子”:-MW6eEidZFCLeeZ0uBk1,“所有者”:BPQDIJVYX7G7ZHE8AP0TGEYMJE2]),[]
这里还显示了一个空数组。我不想要这个空数组。我只想显示匹配列表。
获取匹配lid的代码是否正确?尝试添加第二个过滤器,检查数组是否为空,类似于将
filter{!$0.values.isEmpty}
添加到同一个函数?添加到您发布的代码yesvar sortStep1=self.testArray.map{dict in dict.map{($0.key,SomeData1(dict:$0.value))}.filter{$0.1.lid==self.listid}.filter{!$0.values.isEmpty}将.filter({!$0.isEmpty})
添加到sortStep1
,它应该可以完成这个任务。