gpt4 book ai didi

scala - 给定序列中的一个元素,如何获取前一个元素?

转载 作者:行者123 更新时间:2023-12-04 13:08:17 24 4
gpt4 key购买 nike

假设我有一个 Scala 列表 List("apple", "orange", "banana", "chinese gooseberry") *.我想搜索这个列表并返回列表中与我已有的项目相关的前一个项目。

例如:getPrevious(fruit: String, fruits: List[String]): Option[String]应该回来

  • Some("apple")如果我用 fruit 调用它"orange" 的参数;
  • Some("banana")"chinese gooseberry" ;
  • None如果我用 "apple" 调用它(不存在前一个元素)或 "potato" (不在列表中)。

  • 命令式很容易完成,但我怎样才能以优雅的功能方式做到这一点?我能想到的最好的方法如下:
    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 }

    它有效,但并不优雅或高效。我特别讨厌转换 filter迭代器 toList .我该如何改进?

    (*顺便说一句, List 是用于 sliding 迭代的最佳集合吗?)

    最佳答案

    这是使用 collectFirst 的较短版本:

    def previous(fruit: String, fruits: List[String]): Option[String] =
    fruits.sliding(2).collectFirst{ case List(previous, `fruit`) => previous}

    注意 fruit 周围的反引号以匹配参数值。使用 collectFirst也会在第一次匹配时停止,而不是用 filter 遍历整个迭代器.

    关于scala - 给定序列中的一个元素,如何获取前一个元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25049567/

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