Swift遍历字典数组并创建一个新字典

时间:2020-01-04 15:29:42

标签: arrays swift

我正在努力获取新的字典,其中包含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]
  }
}

我做错了什么?还是有更好的方法?

1 个答案:

答案 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)
相关问题