1

Stream の組み込み zip 関数は、入力ストリームのペアの最短で切り捨てられるように見えます。この機能を実装するにはどうすればよいですか:

def firstOrLongest[T]( a : Stream[ T ], b : Stream[ T ) : Stream[ T ]
// resulting stream should have the property that:
// while there are still elements of a, return (the corresponding element of) a 
// else return (the corresponding element of) b.
4

2 に答える 2

2

メソッドを使用zipAllして、短いコレクションを長いコレクションの長さに拡張できます。この方法には、多くの中間オブジェクトの作成が含まれます。

def firstOrLongest[T]( a : Stream[T], b : Stream[T]) : Stream[T] = {
  val oa = a.map{ e => Some(e): Option[T] }
  val ob = b.map{ e => Some(e): Option[T] }
  oa.zipAll(ob, None, None).collect{
    case (Some(e), _) => e
    case (None, Some(e)) => e
  }
}
于 2013-08-02T13:31:28.020 に答える
1

Stream クラスには、必要なことを正確に実行する追加演算子があります。

あなたの説明は次のように述べています:

// while there are still elements of a, return (the corresponding element of) a 
// else return (the corresponding element of) b.

Scala では、次のようになります。

a ++ b
于 2016-07-01T01:12:14.427 に答える