日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Scala入门到精通——第三节 Array、List

發(fā)布時間:2024/1/23 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Scala入门到精通——第三节 Array、List 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

本節(jié)主要內容

  • 數(shù)組操作實戰(zhàn)
  • 列表List操作實戰(zhàn)
  • 數(shù)組操作實戰(zhàn)

    1 定長數(shù)組

    //定義一個長度為10的數(shù)值數(shù)組 scala> val numberArray=new Array[Int](10) numberArray: Array[Int] = Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0) //定義一個長度為10的String類型數(shù)組 scala> val strArray=new Array[String](10) strArray: Array[String] = Array(null, null, null, null, null, null, null, null, null, null)//可以看出:復雜對象類型在數(shù)組定義時被初始化為null,數(shù)值型被初始化為0//數(shù)組元素賦值 scala> strArray(0)="First Element" //需要注意的是,val strArray=new Array[String](10) //這意味著strArray不能被改變,但數(shù)組內容是可以改變的 scala> strArray res62: Array[String] = Array(First Element, null, null, null, null, null, null, null, null, null)//另一種定長數(shù)組定義方式 //這種調用方式其實是調用其apply方法進行數(shù)組創(chuàng)建操作 scala> val strArray2=Array("First","Second") strArray2: Array[String] = Array(First, Second)Scala中的Array以Java中的Array方式實現(xiàn)

    2 變長數(shù)組 ArrayBuffer

    //要使用ArrayBuffer,先要引入scala.collection.mutable.ArrayBuffer scala> import scala.collection.mutable.ArrayBuffer import scala.collection.mutable.ArrayBuffer//創(chuàng)建String類型ArrayBuffer數(shù)組緩沖 scala> val strArrayVar=ArrayBuffer[String]() strArrayVar: scala.collection.mutable.ArrayBuffer[String] = ArrayBuffer()//+=意思是在尾部添加元素 scala> strArrayVar+="Hello" res63: strArrayVar.type = ArrayBuffer(Hello)//+=后面還可以跟多個元素的集合 //注意操作后的返回值 scala> strArrayVar+=("World","Programmer") res64: strArrayVar.type = ArrayBuffer(Hello, World, Programmer)//顯示完整數(shù)組內容 scala> strArrayVar res65: scala.collection.mutable.ArrayBuffer[String] = ArrayBuffer(Hello, World, Programmer)//++=用于向數(shù)組中追加內容,++=右側可以是任何集合 //追加Array數(shù)組 scala> strArrayVar++=Array("Wllcome","To","XueTuWuYou") res66: strArrayVar.type = ArrayBuffer(Hello, World, Programmer, Wllcome, To, Xue TuWuYou) //追加List scala> strArrayVar++=List("Wellcome","To","XueTuWuYou") res67: strArrayVar.type = ArrayBuffer(Hello, World, Programmer, Wllcome, To, Xue TuWuYou, Wellcome, To, XueTuWuYou)//刪除末尾n個元素 scala> strArrayVar.trimEnd(3)scala> strArrayVar res69: scala.collection.mutable.ArrayBuffer[String] = ArrayBuffer(Hello, World, Programmer, Wllcome, To, XueTuWuYou)
    • 1
    //創(chuàng)建整型數(shù)組緩沖 scala> var intArrayVar=ArrayBuffer(1,1,2) intArrayVar: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(1, 1, 2)//在數(shù)組索引為0的位置插入元素6 scala> intArrayVar.insert(0,6)scala> intArrayVar res72: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(6, 1, 1, 2)//在數(shù)組索引為0的位置插入元素7,8,9 scala> intArrayVar.insert(0,7,8,9)scala> intArrayVar res74: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(7, 8, 9, 6, 1, 1,2)//從索引0開始,刪除4個元素 scala> intArrayVar.remove(0,4)scala> intArrayVar res77: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(1, 1, 2)//轉成定長數(shù)組 scala> intArrayVar.toArray res78: Array[Int] = Array(1, 1, 2)//將定長數(shù)組轉成ArrayBuffer scala> res78.toBuffer res80: scala.collection.mutable.Buffer[Int] = ArrayBuffer(1, 1, 2)
    • 1

    3 數(shù)組的遍歷

    //to scala> for(i <- 0 to intArrayVar.length-1) println("Array Element: " +intArrayVar(i)) Array Element: 1 Array Element: 1 Array Element: 2 //until scala> for(i <- 0 until intArrayVar.length) println("Array Element: " +intArrayVar(i)) Array Element: 1 Array Element: 1 Array Element: 2//數(shù)組方式(推薦使用) scala> for(i <- intArrayVar) println("Array Element: " + i) Array Element: 1 Array Element: 1 Array Element: 2//步長為2 scala> for(i <- 0 until (intArrayVar.length,2)) println("Array Element: " +intA rrayVar(i)) Array Element: 1 Array Element: 2//倒序輸出 scala> for( i<- (0 until intArrayVar.length).reverse) println("Array Element: "+intArrayVar(i)) Array Element: 2 Array Element: 1 Array Element: 1

    4 數(shù)組轉換

    //生成新的數(shù)組,原數(shù)組不變 //緩沖數(shù)據轉換后產生的仍然是緩沖數(shù)組 scala> var intArrayVar2=for(i <- intArrayVar) yield i*2 intArrayVar2: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(2, 2, 4)//定長數(shù)組轉轉后產生的仍然是定長數(shù)組,原數(shù)組不變 scala> var intArrayNoBuffer=Array(1,2,3) intArrayNoBuffer: Array[Int] = Array(1, 2, 3)scala> var intArrayNoBuffer2=for(i <- intArrayNoBuffer) yield i*2 intArrayNoBuffer2: Array[Int] = Array(2, 4, 6)//加入過濾條件 scala> var intArrayNoBuffer2=for(i <- intArrayNoBuffer if i>=2) yield i*2 intArrayNoBuffer2: Array[Int] = Array(4, 6)

    5 數(shù)組操作中的常用算法

    //定義一個整型數(shù)組 scala> val intArr=Array(1,2,3,4,5,6,7,8,9,10) intArr: Array[Int] = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)//求和 scala> intArr.sum res87: Int = 55//求最大值 scala> intArr.max res88: Int = 10scala> ArrayBuffer("Hello","Hell","Hey","Happy").max res90: String = Hey//求最小值 scala> intArr.min res89: Int = 1//toString()方法 scala> intArr.toString() res94: String = [I@141aba8//mkString()方法 scala> intArr.mkString(",") res96: String = 1,2,3,4,5,6,7,8,9,10scala> intArr.mkString("<",",",">") res97: String = <1,2,3,4,5,6,7,8,9,10>
    • 1

    6 ArrayBuffer Scaladoc解析

    初學者在查看sacaladoc時常常會感到困惑,不用擔心,隨著學習的深入,api文檔中的內容將逐漸清晰
    下面給出兩個示例:
    ++=方法傳入的參數(shù)類型是TraversableOnce Trait的子類,它返回的是更新好的ArrayBuffer

    dropWhile傳入的是一個函數(shù),該函數(shù)返回值是布爾類型,dropWhile反回的是操作后的ArrayBuffer

    7 多維數(shù)組

    通過數(shù)組的數(shù)組實現(xiàn)多維數(shù)組的定義:

    //定義2行3列數(shù)組 scala> var multiDimArr=Array(Array(1,2,3),Array(2,3,4)) multiDimArr: Array[Array[Int]] = Array(Array(1, 2, 3), Array(2, 3, 4))//獲取第一行第三列元素 scala> multiDimArr(0)(2) res99: Int = 3//多維數(shù)組的遍歷 scala> for(i <- multiDimArr) println( i.mkString(",")) 1,2,3 2,3,4
    • 1

    列表List操作實戰(zhàn)

    1 List類型定義及List的特點

    //字符串類型List scala> val fruit=List("Apple","Banana","Orange") fruit: List[String] = List(Apple, Banana, Orange)//前一個語句與下面語句等同 scala> val fruit=List.apply("Apple","Banana","Orange") fruit: List[String] = List(Apple, Banana, Orange)//數(shù)值類型List scala> val nums=List(1,2,3,4,5) nums: List[Int] = List(1, 2, 3, 4, 5)//多重ListList的子元素為List scala> val diagMatrix=List(List(1,0,0),List(0,1,0),List(0,0,1)) diagMatrix: List[List[Int]] = List(List(1, 0, 0), List(0, 1, 0), List(0, 0, 1))//遍歷List scala> for (i <- nums) println("List Element: "+i) List Element: 1 List Element: 2 List Element: 3 List Element: 4 List Element: 5

    不難看出,List與Array有著諸多的相似之處,但它們有兩個明顯的區(qū)別:
    1 List一但創(chuàng)建,其值不能被改變
    如前面的nums,改變其值的話,編譯器會報錯

    scala> nums(3)=4 <console>:10: error: value update is not a member of List[Int]nums(3)=4

    2 List具有遞歸結構(Recursive Structure),例如鏈表結構

    List類型和其它類型集合一樣,它具有協(xié)變性(Covariant),即對于類型S和T,如果S是T的子類型,則List[S]也是List[T]的子類型

    例如

    scala> var listStr:List[Object]=List("This","Is","Covariant","Example") listStr: List[Object] = List(This, Is, Covariant, Example)//空的List,其類型為Nothing,Nothing在Scala的繼承層次中的最低層 //,即Nothing是任何Scala其它類型如String,Object等的子類 scala> var listStr=List() listStr: List[Nothing] = List()scala> var listStr:List[String]=List() listStr: List[String] = List()
    • 1

    2 List常用構造方法

    //采用::及Nil進行列表構建 scala> val nums = 1 :: (2 :: (3 :: (4 :: Nil))) nums: List[Int] = List(1, 2, 3, 4)//由于::操作符的優(yōu)先級是從右往左的,因此上一條語句等同于下面這條語句 scala> val nums=1::2::3::4::Nil nums: List[Int] = List(1, 2, 3, 4)

    3 List常用操作

    //判斷是否為空 scala> nums.isEmpty res108: Boolean = false//取第一個無素 scala> nums.head res109: Int = 1//取除第一個元素外剩余的元素,返回的是列表 scala> nums.tail res114: List[Int] = List(2, 3, 4)//取列表第二個元素 scala> nums.tail.head res115: Int = 2//插入排序算法實現(xiàn) def isort(xs: List[Int]): List[Int] = if (xs.isEmpty) Nil else insert(xs.head, isort(xs.tail))def insert(x: Int, xs: List[Int]): List[Int] = if (xs.isEmpty || x <= xs.head) x :: xs else xs.head :: insert(x, xs.tail)//List連接操作 scala> List(1,2,3):::List(4,5,6) res116: List[Int] = List(1, 2, 3, 4, 5, 6)//取除最后一個元素外的元素,返回的是列表 scala> nums.init res117: List[Int] = List(1, 2, 3)//取列表最后一個元素 scala> nums.last res118: Int = 4//列表元素倒置 scala> nums.reverse res119: List[Int] = List(4, 3, 2, 1)//一些好玩的方法調用 scala> nums.reverse.reverse==nums res120: Boolean = truescala> nums.reverse.init res121: List[Int] = List(4, 3, 2)scala> nums.tail.reverse res122: List[Int] = List(4, 3, 2)//丟棄前n個元素 scala> nums drop 3 res123: List[Int] = List(4)scala> nums drop 1 res124: List[Int] = List(2, 3, 4)//獲取前n個元素 scala> nums take 1 res125: List[Int] = List(1)scala> nums.take(3) res126: List[Int] = List(1, 2, 3)//將列表進行分割 scala> nums.splitAt(2) res127: (List[Int], List[Int]) = (List(1, 2),List(3, 4))//前一個操作與下列語句等同 scala> (nums.take(2),nums.drop(2)) res128: (List[Int], List[Int]) = (List(1, 2),List(3, 4))//Zip操作 scala> val nums=List(1,2,3,4) nums: List[Int] = List(1, 2, 3, 4)scala> val chars=List('1','2','3','4') chars: List[Char] = List(1, 2, 3, 4)//返回的是List類型的元組(Tuple) scala> nums zip chars res130: List[(Int, Char)] = List((1,1), (2,2), (3,3), (4,4))//List toString方法 scala> nums.toString res131: String = List(1, 2, 3, 4)//List mkString方法 scala> nums.mkString res132: String = 1234//轉換成數(shù)組 scala> nums.toArray res134: Array[Int] = Array(1, 2, 3, 4)
  • List伴生對象方法
  • //apply方法 scala> List.apply(1, 2, 3) res139: List[Int] = List(1, 2, 3)//range方法,構建某一值范圍內的List scala> List.range(2, 6) res140: List[Int] = List(2, 3, 4, 5)//步長為2 scala> List.range(2, 6,2) res141: List[Int] = List(2, 4)//步長為-1 scala> List.range(2, 6,-1) res142: List[Int] = List()scala> List.range(6,2 ,-1) res143: List[Int] = List(6, 5, 4, 3)//構建相同元素的List scala> List.make(5, "hey") res144: List[String] = List(hey, hey, hey, hey, hey)//unzip方法 scala> List.unzip(res145) res146: (List[Int], List[Char]) = (List(1, 2, 3, 4),List(1, 2, 3, 4))//list.flatten,將列表平滑成第一個無素 scala> val xss =| List(List('a', 'b'), List('c'), List('d', 'e')) xss: List[List[Char]] = List(List(a, b), List(c), List(d, e)) scala> xss.flatten res147: List[Char] = List(a, b, c, d, e)//列表連接 scala> List.concat(List('a', 'b'), List('c')) res148: List[Char] = List(a , b, c)

    總結

    以上是生活随笔為你收集整理的Scala入门到精通——第三节 Array、List的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。