9.2 scala函式 list map 元組
阿新 • • 發佈:2019-01-24
基礎語法TestFunc.scala:package com.scalaobject TestFunc {//預設值函式def sayMyName(name : String = "Jack"){ println(name) }//多個int型別引數,相加 def sumMoreParameters(elem : Int*) = { var sum = 0 for(e <- elem){ println(e) sum += e } sum }//含參函式 def add(a:Int,b:Int) = a+b//一個自定義數值,和一個固定數值 def add2 = add(_:Int,2)// 遞迴函式// 必須自行定義函式返回型別 // f(n)=f(n)*f(n-1) def fac(n:Int):Int = if( n <= 0) 1 else n*fac(n-1)// 函式柯里化 // 柯里化,柯里化比較有意思,就是說定義 // 把這個引數一個個獨立開來寫,這就是柯里化,它可以達到什麼效果呢 def mulitply(x:Int)(y:Int) = x*y //一個固定值和一個傳參 def m2 = mulitply(2)_ // 同學們可能會說,這個看起來沒有什麼用處啊,但是我們說柯里化在遞迴,和控制抽象方面比較有用// 在目前我們不去深究這個使用場景,現在就是讓大家知道有這麼個形式,大家掌握到這就可以了// 柯里化就是把引數可以分開來,把部分函式引數可以用下劃線來代替 // => 匿名函式宣告方式 val t = ()=>{333;"xururyun"}//聲明瞭一個函式物件付給了t// :後面是資料型別,c代表傳進來的引數 def testfunc02(c : ()=>String )={ c() }// 匿名函式val d1 = (a:Int)=> a+100// 匿名函式作為引數,其實就是引數名,後面跟上引數型別,然後是表示式 def testf1(callback : (Int,Int)=>Int )={ println(callback(123,123)) }// 巢狀函式,其實就是def裡面套一個def def add3(x:Int, y:Int ,z:Int) = { def add2(x:Int, y:Int) = { x + y } add2(add2(x,y),z) }// 能否看懂??? def sum(f : Int => Int) : (Int , Int) => Int = { def sumF(a : Int , b : Int) : Int = if (a >b ) 0 else f(a) + sumF( a + 1 , b) sumF }// def sum(f : Int => Int) : (Int , Int) => Int = {// def sumF(a : Int , b : Int) : Int ={// if (a >b ) 0 else f(a) + sumF( a + 1 , b)// } // return sumF// } def main(args: Array[String]) { val sumF = sum(x=>x*2) println(sumF(2,3))// sayMyName()// println(sumMoreParameters(1,2,3,4,5,6,7,8,9,10))// println(add(2,3))// println(add2(3))// println(fac(5))// println(d1(4))// println(t)// println(t())// println(testf1((x:Int, y:Int)=>{x*y}))// println( mulitply(123)(123))// println( m2(123))// println(testfunc02( t ))// println(testf1( (a:Int,b:Int)=> a+b))// testf1(add)// println(add3(1,2,3))// def sum(f :Int => Int) : (Int , Int) => Int = {// def sumF(a : Int , b : Int) : Int ={// if (a >b ) 0 else f(a) + sumF( a + 1 , b)// }// return sumF// }// val tttt = (a:Int,b:Int)=>a*b;// testf1(tttt);// testf1((a:Int,b:Int)=>a*b) }}=======================================================================基本用法2TestFunc02.scala 遍歷to untilpackage com.scalaobject TestFunc02 { def test() : Unit = { for(i <- 1.to(100)){ println(i) }// for(i <- 1 to 100 ){// println(i)// } } def test2() = { for(i <- 1 until 100 ){ println(i) } } def test3() = { for(i <- 0 to 100 if (i % 2) == 1 ; if (i % 5) > 3 ){ println("I: "+i) } }// switch def testmatch(n:Any)={ n match { case x:Int => {println("111") ;n}// break; case s:String => println("2222") ;n case _ => {println("other"); "test"}//default } } def sum(elem : Int*) = { var temp = 0 for(e <- elem){ temp += e } temp } def main(args: Array[String]) {// test()// test2()// test3()// println(testmatch(100.0))// println(sum(1,2,3,4,5))// println(sum(1 to 5)) println(sum(1 to 5 :_*)) }}========================================================================基本用法3TestCollection.scala list map foreach distinct sortBy 元組package com.scalaobject TestCollection { def main(args: Array[String]) { var t = List(1,2,3,5,5)// println("---001--"+t(2))// map 個位置相加 函式程式設計// 對集合裡面的每個元素進行操作,有返回值,這裡返回一個新的List// println(t.map( x => {x+2}))// println(t.map(_ + 2)) var t2 = t.+:("test") //新增元素// println(t2)// println(t)// println(t.::("test"))// println("test"::t)// println(6::t2)// println(t2.::(6))// println(List(6).:::(t2))// println((t2):::List(6))// println(t2)// t2 = t:::6::Nil //組成新的List t作為一個元素// println(t2)//遍歷// t2.foreach(a=>print("---+++"+a)) //去重複// println("/--***---"+t.distinct)//排序// println(t.sortBy{ x => -x })//切割 // println("---+++++********************Slice"+t.slice(0, 2))// println("-*--*--*--*--*--*--*--*--*-")// for(temp<-t2){// print(temp)// }// println("-*--*--*--*--*--*--*--*--*-")// for(i <- 0 until t2.length){// println(i)// println(t2(i))// }// println("-*--*--*--*--*--*--*--*--*-")// println(t./:(0)({// (sum,num)=>sum-num// })) // 1,2,3,5,5 // reduce 就是對集合裡面的每個元素依次進行操作// println(t.reduce( (a,b) => a+b ))// println(t.reduce( _ - _))// // filter 是把匿名函式返回為True保留下來// println(t.filter ( _ > 3 ))// println(t.take(3)) //取前三個元素// println("-*--*--*--*--*--*--*--*--*-")// println(t.foldLeft(0)((sum,num)=>{ //帶初始值的reduce// print(sum+"--"+num+" ");// sum-num;// }))// println("-*--*--*--*--*--*--*--*--*-")// println(t.map(v =>v+2))// println("-*--*--*--*--*--*--*--*--*-")// 元組// var tuple01 = (1,2,3,5)// println(tuple01._1)// println(tuple01._4) var list = List(("yasaka",100),("xuruyun",100),("liangyongqi",50)) val temp = list.sortBy(x => (-x._2,x._1)) println(temp) }}