2017-11-28 5 views
1

私は値を受け取り、ペアのリストpairUpを返します。スカラ。反復が増加するリストを返すループが必要です

私はflightPass.keysの各値に対してpairUpを実行し、これらすべての返された値の大きなリストを返すforループを書きたい

とキーセット、flightPass.keys

val result:List[(Int, Int)] = pairUp(flightPass.keys.toSeq(0)).toList 
for (flight<- flightPass.keys.toSeq.drop(1)) 
{val result:List[(Int, Int)] = result ++ pairUp(flight).toList} 

私は常にエラーを取得し、この上のいくつかのさまざまなバリエーションを試してみた:

<console>:23: error: forward reference extends over definition of value result 
for (flight<- flightPass.keys.toSeq.drop(1)) {val result:List[(Int, Int)] = result ++ pairUp(flight).toList} 
                      ^

ので、私がここで間違って何をやっている、他の言語で動作するはずです、私はこのように感じますか?

答えて

0

まず、valとしてresultを定義しました。これは変更不可能であり、変更できないことを意味します。

flightPass.keysの各値に「pairUp」を適用する場合は、どうしてmap()を入力してください。次いで、リストのリストに値のリストを変換し

val result = flightPass.keys.map(pairUp) //add .toList if needed 
+0

私はある種のバッファ制限があるかもしれないと思う。 result.lengthの値は933ですが、flightPass.keys.lengthはもっと長くなります。それとも関連していないのでしょうか? これは私がループのために恐ろしいためにびっくりするようになった理由です。 –

+0

@MatthewIrwin、933は制限されたメモリを備えた小さなコンピュータで作業していない限りあまり大きくありません。エラーの適切な説明なしに問題を解決するのは難しいです。キーを抽出するときに '.toIterator'を追加することができます。このように 'result'は' Iterator'になります。要求されたときにのみ、各鍵を1つずつ抽出して処理します。 – jwvh

+0

各pairUpは、約5000のエントリを持つリストを返します。最終結果には、flightPass.keysからX量を落とすと –

0

A Scalaの方法は、次に、を平らマップの短いflatMapと呼ばれる単一のリストにそれらを減少させます。あなたはこのようにそれを使用します。

flightPass.keys.toSeq.flatMap(k => pairUp(k)) 

このflightPass.keysから各「キー」を取り、pairUp(マッピング部)に渡します、そしてpairUpに各呼び出しの結果List Sを取り、それらを「平ら」結果として単一の結合リストが得られます。

関連する問題