gpt4 book ai didi

scala - 迭代列表,返回当前元素、下一个元素以及当前元素之前的元素

转载 作者:行者123 更新时间:2023-12-01 17:44:03 26 4
gpt4 key购买 nike

我在以 scala 式且优雅的方式编写特定应用程序时遇到问题。我已经尝试了一段时间,但我找不到解决此问题的“好的”解决方案:

鉴于我有以下列表:

List("foo", "bar", "baz", "blah")

我想迭代这个列表,不仅给出每次迭代的当前元素,还给出当前元素之前和之后的元素。这可能是一个 Tuple3,但不是必需的。这可能是元组签名:

(Option[T], T, Option[T])

为了澄清我的意思,这是在 List[String] 上每次迭代的建议元组,在第四次之后结束。

迭代 1:(None, "foo", Some("bar"))

迭代 2:(Some("foo"), "bar", Some("baz"))

迭代 3:(Some("bar"), "baz", Some("blah"))

迭代 4:(Some("baz")、"blah"、None)

我怎样才能达到这样的结果呢?再次强调:我不受 Tuple3 的约束,任何其他解决方案也非常感谢!

谢谢!

最佳答案

这是一种方法。它使用新的 Scala 2.8 收集方法 sliding

def window[A](l: List[A]): Iterator[List[Option[A]]] = 
(None :: l.map(Some(_)) ::: List(None)) sliding 3

window(List(1, 2, 3, 4, 5)).toList

// List(List(None, Some(1), Some(2)), List(Some(1), Some(2), Some(3)), List(Some(2), Some(3), Some(4)), List(Some(3), Some(4), Some(5)), List(Some(4), Some(5), None))

更新:这是适用于 Streams 的版本。

def windowS[A](s: Stream[A]): Stream[List[Option[A]]] = 
(None #:: s.map(Some(_): Option[A]) #::: Stream(None: Option[A])).sliding(3).toStream.map(_.toList)

val posInts = Stream.range(1, Integer.MAX_VALUE)
windowS(posInts).take(5).toList

关于scala - 迭代列表,返回当前元素、下一个元素以及当前元素之前的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2135126/

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