如果我们在scala中有一个数组,就像 val myArray = myObject(N)(M)
将一行数组传递给函数非常容易:
myFunction的(myArray的(i))的
是否可以传递列而不是行?或者我是否必须将该行的所有元素复制到新的1d数组并传递该数组?
答案 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)
给出了第二列。