scala – 如何在列表中找到成绩最好的学生?
发布时间:2020-12-16 19:20:15 所属栏目:安全 来源:网络整理
导读:假设,我有一份学生名单.学生有姓名,出生日期,年级等字段.您如何找到 Scala中成绩最好的学生? 例如: List(Student("Mike","A"),Student("Pete","B"),Student("Paul",A))" ? 我想得到 List(Student("Mike",A)) 显然,我可以找到最高等级(上面列表中的“A”)然
假设,我有一份学生名单.学生有姓名,出生日期,年级等字段.您如何找到
Scala中成绩最好的学生?
例如: List(Student("Mike","A"),Student("Pete","B"),Student("Paul",A))" ? 我想得到 List(Student("Mike",A)) 显然,我可以找到最高等级(上面列表中的“A”)然后过滤列表 students.filter(_.grade == max_grade) 该解决方案是O(N),但在列表上运行两次.你能建议更好的解决方案吗? 解决方法
在列表上运行两次可能是最好的方法,但如果你坚持只运行一次的解决方案,你可以使用折叠(这里适用于空列表):
(List[Student]() /: list){ (best,next) => best match { case Nil => next :: Nil case x :: rest => if (betterGrade(x,next)) best else if (betterGrade(next,x)) next :: Nil else next :: best }} 如果您不熟悉折叠,则会在答案here中对它们进行描述.当您通过集合(例如列表)时,它们是累积某些内容的一般方式.如果你不熟悉匹配,你可以用isEmpty和head做同样的事情.如果您希望学生的顺序与原始列表中的顺序相同,请在结尾处运行.reverse. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |