【问题标题】:scala how to create array of size using length of another array of different typescala如何使用另一个不同类型数组的长度创建大小数组
【发布时间】:2017-05-10 08:25:13
【问题描述】:

我正在尝试使用另一个 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)
  }   
}

编译器抛出错误:“type mismatch; found : Int required: Char”

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

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

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

由于在 java 中这段代码可以毫无问题地编译,我想知道 在Scala中使用另一个数组长度作为大小参数来初始化不同数组的正确方法是什么?

【问题讨论】:

    标签: arrays scala


    【解决方案1】:

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

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

    第二个有效

    val c = Array[Char](2)
    

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

    【讨论】:

      【解决方案2】:

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

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

      2.object Array有一个apply方法,在你使用的代码中,but它不能和伴生类一样构造。

      对于这段sn-p的代码,解决办法是:

      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)
        }   
      }
      

      请注意修改,在创建的Array类中添加new关键字。

      【讨论】:

        猜你喜欢
        • 2020-02-19
        • 2019-04-22
        • 1970-01-01
        • 2021-12-05
        • 2019-06-01
        • 1970-01-01
        • 2021-07-30
        • 1970-01-01
        • 2019-04-07
        相关资源
        最近更新 更多