Scala:删除第一列(每行中的第一个元素)

时间:2015-06-12 01:52:07

标签: arrays scala seq

给定var x: Array[Seq[Any]],从每行中删除第一个元素的最有效(快速,就地可行?)方法是什么?

我尝试过以下但是没有用 - 可能是因为不变性......

  for (row <- x.indices)
    x(row).drop(1)

2 个答案:

答案 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))