我正在努力获取新的字典,其中包含80个条件中的10个元素的条件字典。
这是学生json示例:
{
"id": 111,
"name": "John",
"gender": "male",
"grade": 80,
"extraCredit": 20
},
{
"id": 112,
"name": "Jenny",
"gender": "female",
"grade": 85,
"extraCredit": 5
}
和我的结构:
struct StudentData: Decodable {
var id: Int
var name: String
var grade: Int
var extraCredit: Int
}
我需要计算每个学生的成绩以获得最终成绩并显示前10名 这是我要遍历的代码:
var newStudentData = [Dictionary<String, Any>]()
for student in studentData {
let finalGrade = student.grade + (student.extraCredit * 0.5)
if finalGrade > 88 {
newStudentData.append(student) // error on cannot convert value type of ’StudentData’ to expected argument type ‘[String: Any]
}
}
我做错了什么?还是有更好的方法?
答案 0 :(得分:1)
newStudentData
是字典(为什么?),但是您要向其附加StudentData
的实例。这是行不通的。
也就是说,我可能会这样重写:
struct StudentData: Decodable {
let id: Int
let name: String
let grade: Int
let extraCredit: Int
var finalGrade: Int {
return self.grade + self.extraCredit / 2
}
}
var students = [StudentData]()
// fill students array here
let beat88 = students.filter { $0.finalGrade > 88 }
let top10 = beat88.sorted { $0.finalGrade > $1.finalGrade }.prefix(10)