在Scala中合并两个惰性列表

时间:2017-11-23 12:37:11

标签: scala list merge functional-programming

任何人都可以帮助我吗? 我需要创建函数«lazymerge»,它从两个排序的惰性列表生成一个新的排序列表。你需要使用流。 例如:[1; 3; 5; 7; 9; 11]和[2; 4; 6; 8]给你[1; 2; 3; 4; 5; 6; 7; 8; 9; 11]

我尝试了一切:( 此外,它必须以功能的方式完成。

1 个答案:

答案 0 :(得分:2)

您需要比较两个流的当前头部,并使用较小的一个作为每次迭代的最终流的当前头部。

val intStream1 = 1 #:: 5 #:: Stream(10)

val intStream2 = 2 #:: 4 #:: Stream(12)

def sortedMerge(stream1: Stream[Int], stream2: Stream[Int]): Stream[Int] = (stream1.isEmpty, stream2.isEmpty) match {
  case (false, false) => (stream1.head <= stream2.head) match {
    case true => stream1.head #:: sortedMerge(stream1.tail, stream2)
    case false => stream2.head #:: sortedMerge(stream1, stream2.tail)
  }
  case (false, true) => stream1
  case (true, false) => stream2
  case (true, true) => Stream.empty[Int]
}
}

val sortedStream = sortedMerge(intStream1, intStream2)