加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读