scala如何使用另一个不同类型的数组的长度来创建大小的数组

时间:2017-05-10 00:04:14

标签: arrays scala

我正在尝试使用另一个Int的大小数组创建一个Char数组。代码没有编译:

object Main {      
  def main(args: Array[String]): Unit = {        
    val mapping = Map(1 -> "ABC", 2 -> "DEF")    
    val a = mapping.keySet.toArray    
    val c = Array[Char](a.length)
  }   
}

编译器抛出错误:"类型不匹配;发现:需要Int:Char"

当我将上面的代码更改为:

val c = Array[Char](2) // no compiler error

看起来编译器将我的输入解释为不是大小参数,而是认为它是Char,例如Char数组的初始元素

因为在java中这段代码编译没有问题我想知道 什么是使用另一个数组长度作为大小参数在Scala中初始化不同数组的正确方法?

2 个答案:

答案 0 :(得分:5)

您应该在最后一行使用.ofDim

val c = Array.ofDim[Char](a.length)

第二个工作

val c = Array[Char](2)

因为编译器将2本身视为一个字符。

答案 1 :(得分:3)

scala中的

数组类型有一个令人困惑的方面,让我帮你澄清一下:

1.Array类型有一个类和一个对象,该对象被称为特定类的伴随对象

2.object数组有一个应用方法,在您使用的代码中,but它不能与伴侣类构造相同。

对于此代码段,解决方案是:

object Main {      
  def main(args: Array[String]): Unit = {        
    val mapping = Map(1 -> "ABC", 2 -> "DEF")    
    val a = mapping.keySet.toArray    
    val c = new Array[Char](a.length)
  }   
}

请注意更改它,将new关键字添加到创建的Array类中。