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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

重游Scala02

發(fā)布時間:2024/2/28 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 重游Scala02 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
數(shù)組: package com.henu.georgeimport scala.collection.mutable.ArrayBuffer/*** George* 定長數(shù)組和變長數(shù)組*/ object ArrayDemo {def main(args: Array[String]): Unit = {//初識化一個定長數(shù)組,其所有元素均為0val arr1 = new Array[Int](8)println(arr1)//調(diào)用mkString(“ ”)可以字符串輸出println(arr1.mkString(" "))//0 0 0 0 0 0 0 0//將數(shù)組轉(zhuǎn)換成數(shù)組緩沖,就可以看到原數(shù)組中的內(nèi)容了//toBuffer會將數(shù)組轉(zhuǎn)換長數(shù)組緩沖println(arr1.toBuffer)//ArrayBuffer(0, 0, 0, 0, 0, 0, 0, 0)for (elem <- arr1) {println(elem)}arr1(0) = 1println(arr1(0))//1//注意:如果沒有new,相當(dāng)于調(diào)用了數(shù)組的apply方法,直接為數(shù)組賦值//初始化一個長度為1的定長數(shù)組,小括號中為數(shù)組的元素val arr2 = Array[Int](10)println(arr2.toBuffer)//ArrayBuffer(10)//定義一個長度為3的定長數(shù)組val arr3 = Array("George","love","who")println(arr3(1))//love//變長數(shù)組(數(shù)組緩沖)//如果想使用數(shù)組緩沖,需要導(dǎo)入import scala.collection.mutable.ArrayBuffer包//不使用new的時候,小括號中為元素,不是數(shù)組長度,小括號不能省略,里面可以不寫元素val arr01 = ArrayBuffer[Int]()//new的時候,小括號里面是元素個數(shù),因為是變長數(shù)組,所以()可以省略val arr02 = new ArrayBuffer[Int]val arr03 = new ArrayBuffer[Int]()arr02+=1arr02+=(2,3,4,5,6)arr02++=Array(8,9)arr02++=ArrayBuffer(10)arr02.foreach(print)//1234568910//在數(shù)組某個位置插入元素用insert(位置,元素)//在下邊0之前插入元素println()arr02.insert(0,888)arr02.foreach(print)//8881234568910println()arr02.remove(7)arr02.foreach(print)//888123456910println()arr02.remove(6,2)arr02.foreach(print)//8881234510//遍歷數(shù)組val array = Array(1,2,3,4,5,6,7,8,9)for (elem <- array) {println(elem)}println("###################")//02468for (i <- 0 until(array.length,2)){print(i)//02468}for(i <- (0 until array.length).reverse)print(i)//876543210println("###################")array.foreach(print)//123456789println("*******************")val res = for (elem <- array) yield elem*2res.foreach(print)//24681012141618println()array.map(_ *3).foreach(print)//369121518212427println()val res2 = for (elem <- array if elem%2 == 0) yield elem * 10println(res2.toBuffer)//ArrayBuffer(20, 40, 60, 80)val res3 = array.filter(_ % 2 == 0).map(_ * 10)println(res3.toBuffer)//ArrayBuffer(20, 40, 60, 80)println(array.sum)println(array.max)println(array.min)println(array.sorted.toBuffer)/*** 45* 9* 1* ArrayBuffer(1, 2, 3, 4, 5, 6, 7, 8, 9)*/} }¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥ package com.henu.george/*** George* 元組,不能添加、刪除、修改。一旦創(chuàng)建,不會有變化。*/ object TupleDemo {def main(args: Array[String]): Unit = {//元組的創(chuàng)建val tuple1 = (1,2,3,"George")println(tuple1)//(1,2,3,George)//元組的創(chuàng)建最大能創(chuàng)建22個val tuple2 = Tuple3(1,2,3)println(tuple2)//(1,2,3)val a = (1,2,3,4,"George","never")println(a.productArity)//6println(a.productElement(4))//Georgeprintln(a._4)//4//元組的遍歷for (elem <- tuple1.productIterator) {print(elem)}println()tuple1.productIterator.foreach(print)println()/*** 4、將對偶的集合轉(zhuǎn)換成映射* 元組可以裝著多個不同類型的值。只有2個元素的元組稱為對偶。對偶是元組的一種形式。* 映射是K/V對偶的集合。*/val arrA = Array(("George",22),("Honey",20))println(arrA.toMap)//Map(George -> 22, Honey -> 20)/*** 拉鏈操作* zip命令可以將多個值綁定在一起* 注意:如果兩個數(shù)組的元素個數(shù)不一致,拉鏈操作后生成的數(shù)組的長度為較小的那個數(shù)組的元素個數(shù)*/val names = Array("George","Dage","GeorgeDage")val scores = Array(100,99,98)val ns = names.zip(scores)println(ns.toMap)//Map(George -> 100, Dage -> 99, GeorgeDage -> 98)} }¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥ package com.henu.george/*** George* 集合* Scala的集合有三大類:序列Seq、集Set、映射Map,所有的集合都擴展自Iterable特質(zhì)* 在Scala中集合有可變(mutable)和不可變(immutable)兩種類型,immutable類型的集合初始化后就不能改變了(注意與val修飾的變量進行區(qū)別)*/ object CollectionDemo {def main(args: Array[String]): Unit = {/*** 列表List* 不可變的序列 import scala.collection.immutable._* 在Scala中序列表要么為空(Nil表示空列表)要么是一個head元素加上一個tail列表。* 9 :: List(5, 2) :: 操作符是將給定的頭和尾創(chuàng)建一個新的列表* 注意::: 操作符是右結(jié)合的,如9 :: 5 :: 2 :: Nil相當(dāng)于 9 :: (5 :: (2 :: Nil))*///創(chuàng)建一個不可變的集合,長度不能改變,元素也不能改變val list1 = List(1,2,3)println(list1(0))//1val list2 = 0::list1list2.foreach(print)//0123println()val list3 = list1.::(0)list3.foreach(print)println()val list4 = 0+:list1val list5 = list1.+:(0)list5.foreach(print)//0123println()//將一個元素添加到lst1的后面產(chǎn)生一個新的集合val list6 = list1:+3val list7 = list1.:+("12")list7.foreach(print)//12312println()val newList1 = List(4,5,6)//將2 個list合并成一個新的Listval list8 = list1 ++ newList1list8.foreach(print)//123456println()val list9 = list1 ++: newList1list9.foreach(print)//123456println()//將newList1插入到list1的后面val list10 = list1.:::(newList1)list10.foreach(print)//456123println()val list11 = list1:::newList1list11.foreach(print)//123456} } ¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥ package com.henu.georgeimport java.nio.charset.IllegalCharsetNameExceptionimport scala.collection.mutable.ListBufferobject MutListDemo {def main(args: Array[String]): Unit = {//構(gòu)建一個可變列表,初始有3個元素1,2,3//小括號里面是元素,不是長度val list1 = ListBuffer[Int](1,2,3)//必須有括號,括號中可以不寫元素,沒有括號可以編譯通過,但運行報錯val list2 = ListBuffer[Int]()//必須有括號,括號中可以不寫元素,沒有括號可以編譯通過,但運行報錯val list3 = new ListBuffer[Int]val list4 = new ListBuffer[Int]()//取值,改變值list1(0) = 11println(list1(0))//向list1中追加元素,注意:沒有生成新的集合list1+=4list1.append(5)list1.append(6,7)for (elem <- list1) {print(elem + "%")} //11%2%3%4%5%6%7%println()val r1 = ListBuffer[Int](1,2,3,4)val r2 = ListBuffer[Int](5,6,7,8)//將lst0中的元素追加到lst1中, 注意:沒有生成新的集合r1 ++= r2r1.foreach(print) //12345678println()//將lst0和lst1合并成一個新的ListBuffer 注意:生成了一個集合val r3 = r1 ++ r2//將元素追加到lst1的后面生成一個新的集合val r4 = r1 :+ 5//將元素追加到lst1的前面生成一個新的集合val r5 = 5 +: r1val r6 = list1.+:(5)r6.foreach(print) //511234567println()val r7 = r1.map(print) //12345678println()println(list1.length)println(list1.size)val newRes = ListBuffer[Int](1,2,3,4,5)} }¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥ /** Scala中的集合對象都有foreach和map兩個方法。兩個方法的共同點在于:都是用于遍歷集合對象, 并對每一項執(zhí)行指定的方法。而兩者的差異在于:foreach無返回值(準(zhǔn)確說返回Unit),map返回集合對象。 運行結(jié)果:b.getClass 得到的是(), 而c.getClass得到的是colletion 。foreach和map的運行結(jié)果一致。 結(jié)論就是:foreach 無法代替map. 而map方法卻可以代替foreach。 */ package com.henu.georgeimport scala.collection.{immutable, mutable}object arrayTest extends App {var increase = (x:Int) => x+1val someNumbers = List(-11,-10,-5,0,5,10)//b返回值為空var b: Unit = someNumbers.foreach(increase)//c返回集合對象var c: immutable.Seq[Int] = someNumbers.map(increase)println(c.getClass)c.foreach((x:Int) => print(x + " ")) }¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥ /** 集是不重復(fù)元素的結(jié)合。集不保留順序,默認是以哈希集實現(xiàn)。 如果想要按照已排序的順序來訪問集中的元素,可以使用SortedSet(已排序數(shù)據(jù)集),已排序的數(shù)據(jù)集是用紅黑樹實現(xiàn)的。 默認情況下,Scala 使用的是不可變集合,如果你想使用可變集合,需要引用 scala.collection.mutable.Set 包。 */ object ImmutSetDemo extends App {val set = Set(1,2,3)println(set)//Set(1, 2, 3)//后面的括號可以省略val set1 = new HashSet[Int]val set2 = set1+4val set3 = set1 ++ Set(5,6,7)} /** Scala中的 Map 和 Java 類似,也是一個散列表,它存儲的內(nèi)容也是鍵值對 (kru-value) 映射。 Scala中,有可變 Map (scala.collection.mutable.Map) 和不可變 Map?(scala.collection.immutable.Map)。 Scala中不可變的 Map 是有序的,可變的Map 是無序的。 默認是immutable.Map,key-value 支持Any,在Map的底層,每對key-valye 是 Tuple2 。隊列數(shù)據(jù)存取符合先進先出策略在Java 里,null 是一個關(guān)鍵字,不是一個對象,所以對它調(diào)用任何方法都是非法的。 但是這對語言設(shè)計者來說是一件令人疑惑的選擇。為什么要在程序員希望返回一個對象的時候返回一個關(guān)鍵字呢? 為了讓所有東西都是對象,也為了遵循函數(shù)式編程的習(xí)慣,Scala鼓勵你在變量和函數(shù)返回值使用Option類型。在沒有值的時候,使用None, 這是Option的一個子類。如果有值可以引用,就使用Some來包含這個值。Some也是Option的子類。迭代器不是一種集合,而是遍歷集合的一個類。 迭代器 it 的兩個基本操作是 next 和 hasNext。 調(diào)用 it.next() 會返回迭代器的下一個元素,并且更新迭代器的狀態(tài)。 調(diào)用 it.hasNext() 用于檢測集合中是否還有元素。 */

?

總結(jié)

以上是生活随笔為你收集整理的重游Scala02的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。