두 개의 배열을 하나로 결합하는 데 어려움을 겪고 있습니다.
배열의 연결은 levels.Id = rooms.level과 같습니다.
모든 아이디어를 감사하십시오!스위프트 : 필터 결합, 사전 매핑
let levels = [
["Name":"Floor 1", "Order":0, "Id": 1],
["Name":"Floor 2", "Order":1, "Id": 2],
["Name":"Outdoor", "Order":2, "Id": 3]]
let rooms = [
["Name":"Master bedroom", "Order":2, "Id": 3, "Level": 2],
["Name":"Guest bedroom", "Order":1, "Id": 4, "Level": 2],
["Name":"Kitchen", "Order":0, "Id": 1, "Level": 1],
["Name":"Boiler", "Order":0, "Id": 2, "Level": 3]]
그리고 가정 및 결과 이렇게 될하려면 "주문"값으로 분류 두 배열에서 :
그래서, 여기에 사전의 제 2 개 배열은
["Floor 1" : ["Kitchen"],
"Floor 2" : ["Guest bedroom", "Master bedroom"],
"Outdoor" : ["Boiler"]]
이 내가 만든 방법입니다 이 배열은 그러나 그것은 추한 외모 :
func replaceIdWithName(id : Int)->String {
return rooms.first(where: { $0["Id"] as? Int == id })!["Name"] as! String
}
func getLevelId(id : Int)->String {
return (levels.first(where: { $0["Id"] as? Int == rooms.first(where: { $0["Id"] as? Int == id })?["Level"] as? Int })?["Name"]) as! String
}
var arr : [String : [Any]] = Dictionary(grouping: rooms.map { $0["Id"] as! Int }, by: { getLevelId(id: $0) })
arr.forEach{ arr[$0.0] = $0.1.map { replaceIdWithName(id: $0 as! Int) } }
그리고
, 나는이 FUNC 모두에 의해 배열을 정렬했습니다 전에 :func sortLevels(p1:[String:Any], p2: [String:Any])->Bool {
let i = p1["Order"] as? Int
let j = p2["Order"] as? Int
if i != nil && j != nil {
return i! < j!
} else {
return false
}
}
를 시도? 이 사이트는 "나에게이 숙제를 지정하십시오."장소가 아닙니다. –
나는 그들이 필요로하는 정확히 방식으로 일하고 있지는 않지만 수백 가지 옵션을 시도했다. 누군가 나를 위해 코드를 작성할 의도가 없었습니다. 하지만 그것은 내 첫 게시물 여기에 나는 내가 바보 같은 시도를 게시 할 의무가있어 놓칠 수 ... – Annah