给定var x: Array[Seq[Any]]
,从每行中删除第一个元素的最有效(快速,就地可行?)方法是什么?
我尝试过以下但是没有用 - 可能是因为不变性......
for (row <- x.indices)
x(row).drop(1)
答案 0 :(得分:2)
首先,Array
是可变的,我猜你打算改变x
的元素,而不是用一个替换整个数组新的数组对象,因此使用val
而不是var
更有意义:
val x: Array[Seq[Any]]
由于您说您的Seq
对象是不可变的,因此您需要确保设置数组中的值。这将有效:
for (row <- x.indices)
x(row) = x(row).drop(1)
这可以用更好的方式编写。例如,您可以使用transform
使用函数映射数组的所有值:
x.transform(_.drop(1))
与map
不同,它就地更新,这将使旧数组保持不变并返回一个新数组。
答案 1 :(得分:1)
这会起作用
scala> val x = Array(List(1,2,3),List(1,2,3))
x: Array[List[Int]] = Array(List(1, 2, 3), List(1, 2, 3))
scala> x map(_.drop(1))
res0: Array[List[Int]] = Array(List(2, 3), List(2, 3))