2

List(1,2,3,4,5) があり、List(3,5,7,9)、つまり要素と前の (1+2, 2+ 3,3+4,4+5)

私は2つのリストを作成してこれをやろうとしました:

val list1 = List(1,2,3,4)
val list2 = (list1.tail ::: List(0))                   // 2,3,4,5,0
for (n0_ <- list1; n1th_ <- list2) yield (n0_ + n1_)

しかし、それは外積のようにすべての要素を互いに組み合わせており、要素をペアで組み合わせたいだけです。私は関数型プログラミングが初めてで、 map() を使用すると思っていましたが、使用できないようです。

4

3 に答える 3

12

List(1, 2, 3, 4, 5).sliding(2).map(_.sum).to[List]仕事をします。

ドキュメント:

def sliding(size: Int): Iterator[Seq[A]] 

「スライディング ウィンドウ」を渡して固定サイズのブロックに要素をグループ化します (grouped で行われるように要素を分割するのではなく)。

于 2013-09-24T19:34:50.963 に答える
1

個人的には、Infinity のようにスライドを使用するのが最も明確だと思いますが、zip ベースのソリューションを使用する場合は、zip 方式を使用することをお勧めします。

( list1, list1.tail ).zipped map (_+_)

zip を使用するより間違いなく明確であることに加えて、zip によって作成される中間データ構造 (タプルのリスト) が zipped では作成されないという点でより効率的です。ただし、無限ストリームで使用しないでください。メモリをすべて消費します。

于 2013-09-24T23:25:31.987 に答える