完成任务的最佳解决方案是什么?
// 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
答案 0 :(得分:4)
该行:
val b = a
不创建“新”数组b
,而只创建对数组a
的新引用。因此a
和b
将指向同一个数组。
答案 1 :(得分:4)
像这样复制2D数组以创建深度克隆:
val b = a.map(_.clone)
答案 2 :(得分:3)
另一种方法是将数组类扩展为具有交换方法。你可以这样做:
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)
}
现在您可以交换这样的值:
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))
这样你可以重复使用它甚至看起来更好; - )