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
,它应该可以完成这个任务。