Scala:删除第一列(每行中的第一个元素)
Scala: remove first column (first element in each row)
给定 var x: Array[Seq[Any]]
,从每行中删除第一个元素的最有效(快速,就地?)方法是什么?
我尝试了以下方法,但没有用 - 可能是因为不变性...
for (row <- x.indices)
x(row).drop(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))
首先,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
不同的是,此更新将保留旧数组不变,return 一个新数组。
编辑:我开始推测哪种方法会更快或更有效,但我想得越多,我就越意识到我不确定。对于大多数用例,两者都应该具有可接受的性能。
给定 var x: Array[Seq[Any]]
,从每行中删除第一个元素的最有效(快速,就地?)方法是什么?
我尝试了以下方法,但没有用 - 可能是因为不变性...
for (row <- x.indices)
x(row).drop(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))
首先,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
不同的是,此更新将保留旧数组不变,return 一个新数组。
编辑:我开始推测哪种方法会更快或更有效,但我想得越多,我就越意识到我不确定。对于大多数用例,两者都应该具有可接受的性能。