Mic*_*ael 7 scala list-comprehension
假设,我有一份清单Students.Students有像田name,birth date,grade等你将如何找到Students最好的grade斯卡拉?
例如:
List(Student("Mike", "A"), Student("Pete", "B"), Student("Paul", A))"
我想得到
List(Student("Mike", "A"), Student("Paul", A))
显然,我可以找到max grade(上面列表中的"A")然后filter列表
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
}}
Run Code Online (Sandbox Code Playgroud)
如果您不熟悉折叠,请在此处的答案中对其进行描述.当你通过一个集合(例如列表)时,它们是积累某些东西的一般方式.如果你不熟悉匹配,你可以用isEmpty和做同样的事情head.如果您希望学生的顺序与原始列表中的顺序相同,请.reverse在最后运行.
| 归档时间: |
|
| 查看次数: |
563 次 |
| 最近记录: |