2017-07-25 8 views
0

値を格納しようとしているScala初心者は、スカラforeachループで取得しますが、悲惨に失敗します。 基本foreachループは現在、次のようになります。各ループから取得した値を格納するScala

二回実行し、参照するたびに返されます。このforeachループを実行
order.orderList.foreach((x: OrderRef) => { 
    val references = x.ref})) 

。私はそれぞれの実行時に返す参照値を取得しようとしています(後でこれらの値にアクセスできるように、リストまたは配列形式の2つの参照があります)。

これを行う方法については本当に混乱しています。 ..

値を取得して配列として格納しようとしましたが、実行時に配列リストに値が保持されていないようです。何かアドバイスをいただければ幸い

val newArray = Array(order.orderList.foreach((x: OrderRef) => { 
    val references = x.ref 
    })) 
    println(newArray) 

これは私の試みでした。これを達成するより良い方法がある場合は、共有してください。おかげ

答えて

1

使用map代わりval references = x.refまた

order.orderList.map((x: OrderRef) => {x.ref})) 

foreachのは、何も返しません。新しいローカル変数を作成し、それに値を割り当てます。以下の例のように変更されたタイプの結果である「マップ」「ユニット」にする必要があります「の」「foreachの」かの

戻り、そして:

+0

ありがとうございます。なぜなら、Arrayは結果を保存するので、ローカル変数は必要ありません。また、Arrayからの値をx個の別々の変数に格納する方法もありますか?私はインデックスを使用してそれらにアクセスできることを知っていますが、私はそれを将来的に証明しようとしています – user610

+0

「別の変数のx個の数値に配列から値を格納する方法はありますか?答えはいいえだ。コード内で1つずつしか実行できません。 – talex

+0

配列のサイズを知っていて、それが修正されていれば、そうすることができます: 'val配列(foo、bar、baz)= order.orderList.map(_。x.ref)'(ただし、これは 'order.orderList'がちょうど3つの要素の' Array'である場合にのみ有効です)。 – Dima

1

答え1に同意し、私はその理由は以下であると信じて:

def map[B](f: (A) ⇒ B): Array[B]

forforeachと比較し、プロトタイプはこの

def foreach(f: (A) ⇒ Unit): Unit

ようにする必要があります

だからmapflatMapのような関数の詳細を考慮し、あなたの元データからmapedされ変更されたデータを取得するために、これらの関数は(yieldを除いて)forforeachなどのすべての件のデータを横断しますしたい場合は、しかし、戻り値を持ちます。

関連する問題