【发布时间】:2019-01-23 00:38:57
【问题描述】:
家庭作业问题。 我需要遍历一系列字典以获得最高 gpa 并打印学生的名字和姓氏。我在访问字典条目的 gpa 字段时遇到问题。
// Task 6
var highestGPA = 0.0
var students : [[String:Any]] =
[["firstName": "John", "lastName": "Wilson", "gpa": 2.4],
["firstName": "Nancy", "lastName": "Smith", "gpa": 3.5],
["firstName": "Michael", "lastName": "Liu", "gpa": 3.1]]
for index in students {
if let val = (_,_,"gpa":key) {
highestGPA = val
}
}
预期的结果是它遍历字典数组并获得最高的 gpa。 实际结果是编译错误“二元运算符 '>' 不能应用于 (,,String) 和 Double 类型的操作数。 所以它似乎得到了字符串“gpa”而不是gpa的值
编辑:我还尝试了以下代码来获取“gpa”字段中的值并转换为双精度值。
for index in students {
myGPA = Double(index["gpa"])
if myGPA > highestGPA {
highestGPA = myGPA
}
}
我得到编译错误:错误:无法使用类型为“(任何?)”的参数列表调用类型“Double”的初始化程序 我的GPA = Double(index["gpa"])
【问题讨论】:
-
应该创建一些结构来存储人员,而不是数组。这样,您可以拥有强类型成员(gpa 将是一个
Double,不需要常量as! Double强制转换)并且不必使用字符串来查找成员(如果您打错了怎么办?) -
if let myGPA = index["gpa"] as? Double {
标签: arrays swift dictionary