scala – 给定序列中的元素,如何获取前一个元素?
发布时间:2020-12-16 19:12:30 所属栏目:安全 来源:网络整理
导读:假设我有一个 Scala列表列表(“apple”,“orange”,“banana”,“chinese gooseberry”)*.我想搜索此列表并返回列表中与我已有项目相关的上一项. 例如:getPrevious(fruit:String,fruits:List [String]):Option [String]应该返回 一些(“苹果”),如果我称
假设我有一个
Scala列表列表(“apple”,“orange”,“banana”,“chinese gooseberry”)*.我想搜索此列表并返回列表中与我已有项目相关的上一项.
例如:getPrevious(fruit:String,fruits:List [String]):Option [String]应该返回 >一些(“苹果”),如果我称它为“橙色”的水果arg; 很容易完成,但我怎么能以优雅的功能方式做到这一点?我能想到的最好的是以下内容: def previous(fruit: String,fruits: List[String]): Option[String] = fruits.sliding(2) .filter { case List(previous,current) => current == fruit } .toList .headOption .map { case List(previous,current) => previous } 它有效,但它不优雅或高效.我特别讨厌将过滤器迭代器转换为List.我怎样才能改进它? (*另外,列出用于滑动迭代的最佳集合?) 解决方法
我认为这是一种直接递归和模式匹配既高效又易于阅读的情况:
@annotation.tailrec def getPrevious(fruit: String,fruits: List[String]): Option[String] = fruits match { case Nil => None case x :: `fruit` :: _ => Some(x) case _ :: xs => getPrevious(fruit,xs) } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |