2009-12-08 16 views
6

Scalaで2D配列のディープコピーを作成するにはどうすればよいですか?Scalaの2D配列のディープコピー?

val a = Array[Array[Int]](2,3) 
a(1,0) = 12 

例えば

私はヴァルbは同じ配列を指し示すことなく、しかし、の値をコピーします。

+0

これはあなたの例では、有効なコードではありません、それを転置得ます。再フォーマットできますか? –

+0

同様のトピックについての議論は、

答えて

0

は考える:

val a = Array[Array[Int]] 

あなたが試みることができる:

for(inner <- a) yield { 
    for (elem <- inner) yield { 
    elem 
    } 
} 

深い質問はあなたがint型とそうでくださいしたいと思う理由ですか?不変型の使用のポイントは、まさにこのような構造を避けることです。

より一般的なArray[Array[T]]をお持ちの場合は、アレイのクローンを作成する方法ではなく、Tのインスタンスをクローンする方法が最も重要です。

+2

Scalaの配列はJava配列なので変更可能です。 –

5

Arrayクラスのcloneメソッドを使用できます。多次元のArrayの場合は、余分な次元にmapを使用してください。あなたたとえば、

val b = a.map(_.clone) 
1

は2回だけ

a.transpose.transpose 
+0

恐ろしいヘビー級ですが、クールです:) –