scala - Scala 中的 CSV 矩阵

标签 scala csv map matrix reduce

将 MxN 矩阵(M 行,N 列)写入 CSV 文件:

我的第一次尝试使用 map 有效,但创建了对 stringbuffer 的 N 个引用。它还在每行的末尾写了一个不必要的逗号。

def matrix2csv(matrix:List[List[Double]], filename: String ) = {
  val pw = new PrintWriter( filename )
  val COMMA = ","

  matrix.map( row => {
    val sbuf = new StringBuffer  
    row.map( elt => sbuf.append( elt ).append( COMMA ))
    pw.println(sbuf)
  })
  pw.flush
  pw.close
}

我的第二次尝试,使用 reduce,也有效,但看起来很笨重:
def matrix2csv(matrix:List[List[Double]], filename: String ) = {
  val pw = new PrintWriter( filename )
  val COMMA = ","

  matrix.map( row => {
    val sbuf = new StringBuffer  
    val last = row.reduce( (a,b)=> {
      sbuf.append(a).append(COMMA)
      b
    })
    sbuf.append(last)
    pw.println(sbuf)
  })
  pw.flush
  pw.close
}

关于更简洁和惯用的方法的任何建议?谢谢。

最佳答案

您可以轻松获取字符串表示形式:

val csvString = matrix.map{ _.mkString(", ") }.mkString("\n")

然后你只需要将它转储到一个文件中。

注意结束行(此处为 "\n"),它们因平台而异。

关于scala - Scala 中的 CSV 矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8053800/

相关文章:

使用 Cocos2d-x + Marmalade 制作类似于 Candy Crush 的 map

python map函数迭代

Scala:基于类型参数过滤集合

regex - PowerShell中的正则表达式仅匹配该行的第一个匹配项

r - 为什么 R 将 UTF-8 header 读取为文本?

scala - 有人可以解释为什么在 Scala 中应用这样的 map 会抛出和 IllegalArgumentException 吗?

Scala Play 2.1 : Accessing request and response bodies in a filter

java - Scala:为什么 java.lang.IllegalArgumentException:无法将给定对象格式化为日期?

Scala:如何像对待数组或 Seq 一样对待 Any?

javascript - D3.js ~ 有没有办法将 csv header 值访问到下拉列表中?