【问题标题】:Efficient 2 dimensional array column extraction in ScalaScala 中高效的二维数组列提取
【发布时间】:2014-03-22 18:29:22
【问题描述】:

以二维数组为例

scala> val a = Array.tabulate(2,3){_+_}
a: Array[Array[Int]] = Array(Array(0, 1, 2), Array(1, 2, 3))

如何定义函数

def getCol(ith: Int, a: Array[Array[Int]]): Array[Int]

交付

val col2 = getCol(2, a)
col2: Array[Int] = Array(1,2)

一种简单而低效的方法包括

def getCol(ith: Int, a: Array[Int]): Array[Int] = {
  val t = a.transpose
  t(ith)
}

因此也要求更有效的方法。

【问题讨论】:

  • 如果您需要真正高效的代码,这是我可能只使用 while 循环的情况之一。我怀疑地图操作是否非常有效,因为问题很简单,这将是我的选择。

标签: arrays scala collections


【解决方案1】:
def getCol(n: Int, a: Array[Array[Int]]) = a.map{_(n - 1)}

请注意,对于第 N 个元素,您必须使用 n - 1

【讨论】:

  • 你能解释一下你在那里做了什么吗? :)
  • @Ahmedov: a.map{_(n - 1)} 只是 a.map{innerArray => innerArray(n - 1)} 的更短版本,a.map{innerArray => innerArray.apply(n - 1)} 的更短版本。 "对于a 的每个内部数组,在索引n-1 处获取一个元素"。
  • 我有一个包含一些空值的二维数组。 2dArray.map(_(n-1)) 为包含空值的列返回 ArrayIndexOutOfBound 异常。有什么解决方法吗?
  • @Ahmedov:你能举个例子吗?
  • pastebin.com/sG3BYXAw 。这是我的本地数据集。我想在销售列中读入一个字符串数组。当我说“val c = localTable.map(_(2))”时,我得到了上述错误。我认为问题源于“销售”列中存在一些空值,因为当我阅读第二列时,我没有收到任何错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-06-22
  • 1970-01-01
  • 1970-01-01
  • 2020-12-13
  • 2012-04-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多