gpt4 book ai didi

scala - 如何在列表中找到成绩最好的学生?

转载 作者:行者123 更新时间:2023-12-03 04:49:37 27 4
gpt4 key购买 nike

假设,我有一个学生列表。 学生姓名出生日期年级等字段。您如何找到学生 拥有 Scala 中最好的成绩

例如:

List(Student("Mike", "A"), Student("Pete", "B"), Student("Paul", A))"

我想要得到

List(Student("Mike", "A"), Student("Paul", 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 中对此进行了描述。 。它们是当您传递集合(例如列表)时积累某些内容的通用方法。如果您不熟悉匹配,可以使用 isEmptyhead 执行相同的操作。如果您希望学生的顺序与原始列表中出现的顺序相同,请在最后运行 .reverse

关于scala - 如何在列表中找到成绩最好的学生?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8093490/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com