Created
October 14, 2018 18:47
-
-
Save ivangodfather/8ed07c7fa58cede24d2d0e5722d7c2f9 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import UIKit | |
var str = """ | |
{ | |
"report":[ | |
{ | |
"enrollment": "rit2011001", | |
"name": "Julia", | |
"subject":[ | |
{ | |
"code": "NLP", | |
"grade": "A" | |
}, | |
{ | |
"code": "DSA", | |
"grade": "A" | |
} | |
] | |
}, | |
{ | |
"enrollment": "rit2011020", | |
"name": "Samantha", | |
"subject":[ | |
{ | |
"code": "COM", | |
"grade": "B" | |
}, | |
{ | |
"code": "OOM", | |
"grade": "A" | |
}, | |
{ | |
"code": "DSA", | |
"grade": "A" | |
} | |
] | |
} | |
] | |
} | |
""" | |
struct ReportData: Decodable { | |
let report: [Report] | |
} | |
struct Report: Decodable { | |
let enrollment: String | |
let name: String | |
let subject: [Subject] | |
} | |
struct Subject: Decodable { | |
let code: String | |
let grade: String | |
} | |
struct Tuple { | |
let name: String | |
let enrollment: String | |
let code: String | |
let grade: String | |
} | |
func decodeReports() { | |
let jsonDecoder = JSONDecoder() | |
guard let data = str.data(using: .utf8), | |
let reportsData = try? jsonDecoder.decode(ReportData.self, from: data) else { | |
fatalError("Error decoding json") | |
} | |
let reports = reportsData.report | |
let tuples = reports.flatMap { report in | |
return report.subject.map { | |
return Tuple(name: report.name, enrollment: report.enrollment, code: $0.code, grade: $0.grade)} | |
} | |
let ordered = tuples.sorted { | |
guard $0.code == $1.code else { return $0.code < $1.code } | |
guard $0.grade == $1.grade else { return $0.grade > $1.grade } | |
guard $0.enrollment == $1.enrollment else { return $0.enrollment < $1.enrollment } | |
return $0.name > $1.name | |
} | |
for t in ordered { | |
print("\(t.code) \(t.grade) \(t.enrollment) \(t.name)") | |
} | |
} | |
decodeReports() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment