Scala附加到空数组

时间:2015-05-29 18:59:57

标签: scala

我试图附加到一个数组但由于某种原因它只是将空格附加到我的数组中。

  def schemaClean(x: Array[String]): Array[String] =
  {
    val array = Array[String]()
    for(i <- 0 until x.length){
      val convert = x(i).toString
      val split = convert.split('|')
      if (split.length == 5) {
        val drop = split.dropRight(3).mkString(" ")
        array :+ drop
      }
      else if (split.length == 4) {
        val drop = split.dropRight(2).mkString(" ")
        println(drop)
        array :+ drop.toString
        println(array.mkString(" "))
      }
    }
   array
  }


  val schema1 = schemaClean(schema)

打印出来:

record_id string

assigned_offer_id string

accepted_offer_flag string

current_offer_flag string

如果我尝试打印schema1只有1个空白行。

1 个答案:

答案 0 :(得分:4)

Scala的Array大小是不可变的。来自Scala's reference

def
    :+(elem: A): Array[A] 
  
    

[用例]此数组的副本,附加了一个元素。

  

因此:+返回一个你未使用的引用的新数组。

val array = ...

应该是:

var array = ...

您应该使用每次追加操作后获得的新数组更新该引用。

由于Scala中没有可变大小的数组,插入后复制Array var的替代方法是BufferArray,请使用其方法运算符+=追加新元素并从缓冲区中获取结果数组,例如:

import scala.collection.mutable.ArrayBuffer
val ab = ArrayBuffer[String]()
ab += "hello"
ab += "world"
ab.toArray
  

res2:Array [String] = Array(hello,world)

应用于您的代码:

def schemaClean(x: Array[String]): Array[String] =
  {
    val arrayBuf = ArrayBuffer[String]()
    for(i <- 0 until x.length){
      val convert = x(i).toString
      val split = convert.split('|')
      if (split.length == 5) {
        val drop = split.dropRight(3).mkString(" ")
        arrayBuf += drop
      }
      else if (split.length == 4) {
        val drop = split.dropRight(2).mkString(" ")
        println(drop)
        arrayBuf += drop.toString
        println(arrayBuf.toArray.mkString(" "))
      }
    }
   arrayBuf.toArray
  }