2016-08-25 5 views
2

プリミティブ型のコレクションからオブジェクトのコレクションを生成する必要があります。だから、zipされたコレクションを使ってスカラーのケースクラスを初期化する

case class Gr (x:Int,y:Int, z:Int) 

val x = List(1,2,4,2,5) 
val y = Array(1,2,7,4,5) 
val z = Seq(1,2,4,8,5) 


(x,y,z).zipped.toList.map(a => Gr(a._1,a._2,a._3)) 
(x,y,z).zipped.map(Gr:(Int,Int,Int) => Gr) 

、1が優れているとどのように二番目は、実際に動作しません:だから私は、次の2つの方法との両方の仕事をしようとしましたか?そしてもっと良い方法がありますか?

答えて

6

第1のものは(x,y,z).zipped.toList.map(Gr.tupled)に減らすことができ、第2のものは(x,y,z).zipped.map(Gr)に減らすことができます。これはもっと短くてわかりやすいものです。


map()への引数は、基本的に、A => Bので、sqrt()が正しいタイプであるため、代わりにDouble => Doubleを入力しているds.map(d => Math.sqrt(d))を書くのは、我々は単にds.map(Math.sqrt)を書くことができることを思い出してください。

この場合、Grコンストラクタはタイプ(A,A,A) => Bです。 Scalaコンパイラはzippedの出力を取り、コンストラクタの型と一致するので、コンストラクタをmap()の引数として使用できます。

+0

申し訳ありませんが、いずれも機能しません! – KarateKid

+0

両方ともすべてのテスト(IDEとREPL)をパスします。 [Scala 2.11.8] – jwvh

+0

はい、私はコード内でGrの定義を変更しました。それに気付かなかった。しかし、まだ2番目の作業は実際にどのように機能しますか? ここではどのような暗黙の変換が行われていますか? – KarateKid

関連する問題