在Scala(或Java)中传递2D数组的列

时间:2014-03-20 16:17:46

标签: java arrays scala

如果我们在scala中有一个数组,就像 val myArray = myObject(N)(M)

将一行数组传递给函数非常容易:

myFunction的(myArray的(i))的

是否可以传递列而不是行?或者我是否必须将该行的所有元素复制到新的1d数组并传递该数组?

3 个答案:

答案 0 :(得分:3)

如果仅限于使用数组,则必须复制所有元素。如果你使用数据的包装版本,你当然可以用不同的方式包装它,包括只能在列中传播的东西。

答案 1 :(得分:2)

您可以使用map(创建临时副本),如下所示:

scala> val arr = Array(Array(1, 2), Array(3, 4))
arr: Array[Array[Int]] = Array(Array(1, 2), Array(3, 4))

scala> arr(1) // row 1
res0: Array[Int] = Array(3, 4)

scala> arr map (_(1))  // col 1
res1: Array[Int] = Array(2, 4)

答案 2 :(得分:1)

对于任何给定的2D数组,例如

val a = Array.tabulate(2,3){_+2*_}
Array(Array(0, 2, 4), Array(1, 3, 5))

应用转置,然后以与行相同的方式获取列

val t = a.transpose
Array(Array(0, 1), Array(2, 3), Array(4, 5))

t(1)
Array(2, 3)

给出了第二列。