我一直在尝试在嵌套结构列表中找到一个结构。任何人都可以帮我吗?
struct Places: PlacesProtocol {
private(set) var id: String
private(set) var name: String
private(set) var childPlaces: [PlacesProtocol]?
init(json: JSON) {
self.name = json[“Name”]
self.id = json[“Id”]
self. childPlaces = json[“ChildPlaces”].arrayValue.map { Places(json: $0) }
}
JSON:
{
"Id": "1",
"Name": "Place 1",
"ChildPlaces": [{
"Id": "12",
"Name": "Place 2",
"ChildPlaces": [{
"Id": "123",
"Name": "Place 3",
"ChildPlaces": [{
"Id": "1234",
"Name": "Place 4",
"ChildPlaces": null
}]
}, {
"Id": "13",
"Name": "Place 5",
"ChildPlaces": null
}]
}]
}
我试过这个:
nestedStruct.filter { $0.id == "13" }
我能够将这个JSON解析为嵌套结构,并且我试图找到一个带有Id的结构。我尝试过滤器,但它只过滤嵌套结构的第一层。有没有办法可以构建递归过滤器来查找嵌套结构内部的结构。
答案 0 :(得分:1)
您可以使用递归函数执行深度优先搜索。这是一个粗略的例子:
extension Place {
depthFirstSearch(where closure: (Place) -> Bool) -> Place? {
if closure(self) { return self }
else {
return self.chlidPlaces.first(where: {
$0.depthFirstSearch(where: closure)
})
}
}
}
let placeID13 = mainPlace.depthFirstSearch(where: { $0.id == "13" })