gpt4 book ai didi

Scala - 增加序列的前缀

转载 作者:行者123 更新时间:2023-12-04 16:52:06 25 4
gpt4 key购买 nike

我想知道获取给定序列的递增前缀的最优雅方法是什么。我的想法如下,但它不是纯粹的功能性或任何优雅:

val sequence = Seq(1,2,3,1,2,3,4,5,6)
var currentElement = sequence.head - 1
val increasingPrefix = sequence.takeWhile(e =>
if (e > currentElement) {
currentElement = e
true
} else
false)

上面的结果是:
List(1,2,3)

最佳答案

您可以采用您的解决方案@Samlik,并有效地压缩 currentElement变量,但在完成后将其映射出来。

sequence.take(1) ++ sequence.zip(sequence.drop(1)).
takeWhile({case (a, b) => a < b}).map({case (a, b) => b})

也适用于无限序列:
val sequence = Seq(1, 2, 3).toStream ++ Stream.from(1)
sequence现在是无限 Stream ,但我们可以查看前 10 项:
scala> sequence.take(10).toList
res: List[Int] = List(1, 2, 3, 1, 2, 3, 4, 5, 6, 7)

现在,使用上面的代码片段:
val prefix = sequence.take(1) ++ sequence.zip(sequence.drop(1)).
takeWhile({case (a, b) => a < b}).map({case (a, b) => b})

再次, prefixStream ,但不是无限的。
scala> prefix.toList
res: List[Int] = List(1, 2, 3)

注意:这不处理 sequence 的情况为空,或者前缀也是无限的。

关于Scala - 增加序列的前缀,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30872049/

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