【问题标题】:Array initializing in ScalaScala中的数组初始化
【发布时间】:2011-04-22 07:32:54
【问题描述】:

我是 Scala 新手,今天才开始学习它。我想知道如何在 Scala 中初始化一个数组。

Java 代码示例

String[] arr = { "Hello", "World" };

Scala 中的上述代码的等价物是什么?

【问题讨论】:

    标签: scala array-initialization


    【解决方案1】:
    scala> val arr = Array("Hello","World")
    arr: Array[java.lang.String] = Array(Hello, World)
    

    【讨论】:

    【解决方案2】:

    要初始化一个用零填充的数组,您可以使用:

    > Array.fill[Byte](5)(0)
    Array(0, 0, 0, 0, 0)
    

    这相当于Java的new byte[5]。

    【讨论】:

    • 仅供参考,列表作为等效初始化器List.fill(5)(0),接受偶数函数。 List.fill(5)(myFunc())
    【解决方案3】:

    还可以使用填充进行更多动态初始化,例如

    Array.fill(10){scala.util.Random.nextInt(5)} 
    

    ==>

    Array[Int] = Array(0, 1, 0, 0, 3, 2, 4, 1, 4, 3)
    

    【讨论】:

      【解决方案4】:

      Vasil 回答的补充:如果您将值作为 Scala 集合给出,则可以编写

      val list = List(1,2,3,4,5)
      val arr = Array[Int](list:_*)
      println(arr.mkString)
      

      但通常toArray方法更方便:

      val list = List(1,2,3,4,5)
      val arr = list.toArray
      println(arr.mkString)
      

      【讨论】:

        【解决方案5】:

        如果你知道Array的长度但不知道它的内容,你可以使用

        val length = 5
        val temp = Array.ofDim[String](length)
        

        如果你想有二维数组但你不知道它的内容,你可以使用

        val row = 5
        val column = 3
        val temp = Array.ofDim[String](row, column)
        

        当然,您可以将 String 更改为其他类型。

        如果你已经知道它的内容,你可以使用

        val temp = Array("a", "b")
        

        【讨论】:

          【解决方案6】:

          另一种声明多维数组的方式:

          Array.fill(4,3)("")
          
          res3: Array[Array[String]] = Array(Array("", "", ""), Array("", "", ""),Array("", "", ""), Array("", "", ""))
          

          【讨论】:

            【解决方案7】:

            [综合所有答案]

            初始化一维数组

            // With fixed values
            val arr = Array("a", "ab", "c")
            
            // With zero value of the type
            val size = 13
            val arrWithZeroVal = Array.ofDim[Int](size) //values = 0
            val arrBoolWithZeroVal = Array.ofDim[Boolean](size) //values = false
            
            // With default value
            val defVal = -1
            val arrWithDefVals = Array.fill[Int](size)(defVal)
            
            //With random values
            val rand = scala.util.Random
            def randomNumberGen: Int = rand.nextInt(5)
            val arrWithRandomVals = Array.fill[Int](size){randomNumberGen}
            

            初始化 2-D/3-D/n-D 数组

            // With zero value of the type
            val arr3dWithZeroVal = Array.ofDim[Int](5, 4, 3) 
            
            // With default value
            val defVal = -1
            val arr3dWithDefVal = Array.fill[Int](5, 4, 3)(defVal)
            
            //With random values
            val arr3dWithRandomValv = Array.fill[Int](5, 4, 3){randomNumberGen}
            
            

            结论: 使用 Array.ofDim[TYPE](d1, d2, d3...) 使用类型的零值。 否则使用 Array.fill[TYPE](d1, d2, d3...)(functionWhichReturnsTYPE)

            输出供参考:

            scala> val arr = Array("a", "ab", "c")
            arr: Array[String] = Array(a, ab, c)
            
            scala> val size = 13
            size: Int = 13
            
            scala> val arrWithZeroVal = Array.ofDim[Int](size) //values = 0
            arrWithZeroVal: Array[Int] = Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
            
            scala> val arrBoolWithZeroVal = Array.ofDim[Boolean](size) //values = false
            arrBoolWithZeroVal: Array[Boolean] = Array(false, false, false, false, false, false, false, false, false, false, false, false, false)
            
            scala> val defVal = -1
            defVal: Int = -1
            
            scala> val arrWithDefVals = Array.fill[Int](size)(defVal)
            arrWithDefVals: Array[Int] = Array(-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1)
            
            scala> val rand = scala.util.Random
            rand: util.Random.type = scala.util.Random$@6e3dd5ce
            
            scala> def randomNumberGen: Int = rand.nextInt(5)
            randomNumberGen: Int
            
            scala> val arrWithRandomVals = Array.fill[Int](size){randomNumberGen}
            arrWithRandomVals: Array[Int] = Array(2, 2, 3, 1, 1, 3, 3, 3, 2, 3, 2, 2, 0)
            
            scala> val arr3dWithZeroVal = Array.ofDim[Int](5, 4, 3) 
            arr3dWithZeroVal: Array[Array[Array[Int]]] = Array(Array(Array(0, 0, 0), Array(0, 0, 0), Array(0, 0, 0), Array(0, 0, 0)), Array(Array(0, 0, 0), Array(0, 0, 0), Array(0, 0, 0), Array(0, 0, 0)), Array(Array(0, 0, 0), Array(0, 0, 0), Array(0, 0, 0), Array(0, 0, 0)), Array(Array(0, 0, 0), Array(0, 0, 0), Array(0, 0, 0), Array(0, 0, 0)), Array(Array(0, 0, 0), Array(0, 0, 0), Array(0, 0, 0), Array(0, 0, 0)))
            
            scala> val arr3dWithDefVal = Array.fill[Int](5, 4, 3)(defVal)
            arr3dWithDefVal: Array[Array[Array[Int]]] = Array(Array(Array(-1, -1, -1), Array(-1, -1, -1), Array(-1, -1, -1), Array(-1, -1, -1)), Array(Array(-1, -1, -1), Array(-1, -1, -1), Array(-1, -1, -1), Array(-1, -1, -1)), Array(Array(-1, -1, -1), Array(-1, -1, -1), Array(-1, -1, -1), Array(-1, -1, -1)), Array(Array(-1, -1, -1), Array(-1, -1, -1), Array(-1, -1, -1), Array(-1, -1, -1)), Array(Array(-1, -1, -1), Array(-1, -1, -1), Array(-1, -1, -1), Array(-1, -1, -1)))
            
            scala> val arr3dWithRandomVals = Array.fill[Int](5, 4, 3){randomNumberGen}
            arr3dWithRandomVals: Array[Array[Array[Int]]] = Array(Array(Array(2, 0, 0), Array(4, 1, 0), Array(4, 0, 0), Array(0, 0, 1)), Array(Array(0, 1, 2), Array(2, 0, 2), Array(0, 4, 2), Array(0, 4, 2)), Array(Array(4, 3, 0), Array(2, 2, 4), Array(4, 0, 4), Array(4, 2, 1)), Array(Array(0, 3, 3), Array(0, 0, 4), Array(4, 1, 3), Array(2, 2, 3)), Array(Array(0, 2, 3), Array(1, 4, 1), Array(1, 3, 3), Array(0, 0, 3)))
            
            

            【讨论】:

              猜你喜欢
              • 2012-12-01
              • 2022-01-26
              • 1970-01-01
              • 2020-10-24
              • 2014-03-01
              • 2015-08-14
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多