2012-03-06 10 views
0
  1. なぜ、次のコードはジョブを実行しませんか?
  2. ステップ2の後に「a」はどのように変更されますか?
  3. タスクを実行する最適なソリューションは何ですか?Scalaで2D配列の要素を交換するにはどうすればよいですか?

    // 1. Create a 2D array 'a' 
    val a = Array.ofDim[String](2, 2) 
    a(0)(0) = "TL" 
    a(0)(1) = "TR" 
    a(1)(0) = "BL" 
    a(1)(1) = "BR" 
    
    // 2. Swap two elements of 'a' to create a new 2D array 'b' 
    val b = a 
    b(0)(0) = a(0)(1) 
    b(0)(1) = a(0)(0) 
    
    // Output 
    println("a:") 
    println(a(0)(0) + " " + a(0)(1)) 
    println(a(1)(0) + " " + a(1)(1)) 
    println("b:") 
    println(b(0)(0) + " " + b(0)(1)) 
    println(b(1)(0) + " " + b(1)(1)) 
    
    Result: 
    a: 
    TR **TR** 
    BL BR 
    b: 
    TR **TR** 
    BL BR 
    

答えて

4

は深いクローンを作成するには、このようなあなたの2次元配列をコピーします。

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

ライン:

val b = a 

は "新しい" 配列bが、配列aにちょうど新しい参照を作成しません。したがってabは同じ配列を指します。

3

別のアプローチは、スワップメソッドを持つように配列クラスを拡張することです。あなたは次のようにそれを行うことができます:あなたはそれを再利用することができますこの方法

import SwapArray._ 

val array = Array(Array(1,2), Array(3,4)) 
array(0).swap(0,1) 
println(array) // => Array(Array(2, 1), Array(3, 4)) 

と言っても;-)

に良くなります。

object SwapArray { 
    class SwapArrayOp[A](array: Array[A]) { 
    def swap(x: Int, y: Int) = { 
     val a = array(x) 
     array(x) = array(y) 
     array(y) = a 
    } 
    } 
    implicit def array2Swap[A](array: Array[A]) = new SwapArrayOp(array) 
} 

を今、あなたは、このような値を入れ替えることができます

関連する問題