欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Scala课程04

程序员文章站 2022-06-14 16:52:37
...

核心内容: 
1、Scala数组操作实战详解

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------

知识点: 
(1)静态数组使用Array进行创建、动态数组使用ArrayBuffer进行创建 
(2)用户提供初始值时不要使用new 
(3)scala中的yield的主要作用是记住每次迭代中的有关值,并逐一存入到一个数组中. 
示例程序:

                                                                                 scala中数组的常见操作

 

object ScalaAction1
{
     println("Welcome to the Scala worksheet")    //> Welcome to the Scala worksheet
     //定义静态数组
     val a1 = new Array[Int](3)                   //> a1  : Array[Int] = Array(0, 0, 0)
     val a2 = new Array[String](3)                //> a2  : Array[String] = Array(null, null, null)
     val a3 = Array[Int](20,30,40)                //> a3  : Array[Int] = Array(20, 30, 40)
     a3(1) = 100
     for(ele<- a3) println(ele)                   //> 20
                                                  //| 100
                                                  //| 40
    //定义动态数组的两种方式
    import scala.collection.mutable.ArrayBuffer
    val a4 = new ArrayBuffer[Double]()            //> a4  : scala.collection.mutable.ArrayBuffer[Double] = ArrayBuffer()
    val a5 = ArrayBuffer[Double](23.0,52.0)       //> a5  : scala.collection.mutable.ArrayBuffer[Double] = ArrayBuffer(23.0, 52.0)
                                                  //| 
    //动态数组的一些基本操作
    val a6 =  ArrayBuffer[Int]()                  //> a6  : scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer()
    a6 += 10                                      //> res0: IT.ScalaAction1.a6.type = ArrayBuffer(10)
    a6 += (20,30)                                 //> res1: IT.ScalaAction1.a6.type = ArrayBuffer(10, 20, 30)
    a6 ++= Array(40,50,60)                        //> res2: IT.ScalaAction1.a6.type = ArrayBuffer(10, 20, 30, 40, 50, 60)
    a6                                            //> res3: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(10, 20, 30, 40
                                                  //| , 50, 60)
    a6.trimEnd(2)
    a6                                            //> res4: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(10, 20, 30, 40
                                                  //| )

    a6.insert(1,100,200)
    a6                                            //> res5: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(10, 100, 200, 
                                                  //| 20, 30, 40)
    a6.remove(2)                                  //> res6: Int = 200
    a6                                            //> res7: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(10, 100, 20, 3
                                                  //| 0, 40)
    val a7 = a6.toArray                           //> a7  : Array[Int] = Array(10, 100, 20, 30, 40)
    //遍历数组的两种方式
    for(ele<- a7) println(ele)                    //> 10
                                                  //| 100
                                                  //| 20
                                                  //| 30
                                                  //| 40
    for(i<- 0 until a7.length) println(a7(i))     //> 10
                                                  //| 100
                                                  //| 20
                                                  //| 30
                                                  //| 40
    //yield的用法
    val a8 = for(ele<- a7) yield ele*2            //> a8  : Array[Int] = Array(20, 200, 40, 60, 80)
    val a9 = for(ele<- a7;if(ele%20 == 0)) yield ele*2
                                                  //> a9  : Array[Int] = Array(200, 40, 80)
    val a10 = a7.filter(_%20==0).map(2*_)         //> a10  : Array[Int] = Array(200, 40, 80)

    //对数组常用的算法操作
    val sum = Array(10,20,30).sum                 //> sum  : Int = 60
    val maxnum = Array(10,20,30).max              //> maxnum  : Int = 30
    val str2 =  ArrayBuffer("zh","ming","abcde").max
                                                  //> str2  : String = zh
    //排序之后返回一个新的数组
    val a11 = a7.sorted                           //> a11  : Array[Int] = Array(10, 20, 30, 40, 100)
    a7                                            //> res8: Array[Int] = Array(10, 100, 20, 30, 40)
    //对动态数组内部进行排序,不返回新的数组
    scala.util.Sorting.quickSort(a7)
    a7                                            //> res9: Array[Int] = Array(10, 20, 30, 40, 100)

    //指定分隔符,将数组中的元素连接起来
    val str3 = a7.mkString(" and ")               //> str3  : String = 10 and 20 and 30 and 40 and 100
    val str7 = a7.mkString("\t")                  //> str7  : String = 10   20  30  40  100
    val str8 = a7.mkString("<",",",">")           //> str8  : String = <10,20,30,40,100>
    //定义二元数组的方式
    val matrix =  Array.ofDim[Double](2,3)        //> matrix  : Array[Array[Double]] = Array(Array(0.0, 0.0, 0.0), Array(0.0, 0.0
                                                  //| , 0.0))
    matrix(1)(0) = 10.0
    matrix                                        //> res10: Array[Array[Double]] = Array(Array(0.0, 0.0, 0.0), Array(10.0, 0.0, 
                                                  //| 0.0))
}