scala 将流拆分为两个流

wmomyfyw  于 2022-12-04  发布在  Scala
关注(0)|答案(1)|浏览(194)

定义“split”函数,将一个流分成两个流。第一个列表应包含奇数索引的元素,第二个列表应包含偶数索引的元素。示例:split(Stream(5, 6, 3, 2, 1)) -> Stream(5, 3, 1) and Stream(6, 2)

我的尝试:

def split(originalElements: Stream[Any]): (Stream[Any], Stream[Any]) = {
  var oddList: Stream[Any] = Stream();
  var evenList: Stream[Any] = Stream();

  for (i <- 0 until originalElements.length) {
    if (i % 2 == 0) {
      oddList = oddList :+ originalElements(i)
    } else {
      evenList = evenList :+ originalElements(i)
    }
  }

  (oddList, evenList)
}

  println(split(Stream(5, 6, 3, 2, 1)))

我得到的输出是-〉(Stream(5, <not computed>),Stream(6, <not computed>))
我对流函数有些困惑,有人能帮我理解这段代码中的错误,以及为什么我没有得到正确的输出吗?提前感谢!

qyswt5oh

qyswt5oh1#

你可以尝试使用分区函数或者自己用filterfilterNot函数重新实现它。流不是一个列表,你不应该使用length。流可能是无限的。

val s = Stream(5, 6, 3, 2, 1)

  val (oddStream, evenStream) = {
    val (odd, even) = s.zipWithIndex.partition {
      case (_, i) => i % 2 == 0
    }
    (odd.map(_._1), even.map(_._1))
  }

相关问题