20170309技术积累2

    xiaoxiao2021-03-25  107

    Scala:

    1.def 方法名(参数名:参数类型,…):返回值类型={方法体},在Scala中,每个句子是不用以分号结束的。

      def add():Unit={...}   在调用方法的时候,如果该方法没有参数,可以省略括号,如:   add   //  加上括号也没事,如  add() 2.条件表达式:    val res = if(x > 7) 1 else 0 3.scala中的while和do-while用法和其它语言是一样的,但是for的用法就不同了   for(i <- 表达式){      循环体    }   for(i <- 0 to arr.length){      println(arr[i])        }    // 同时也可以当foreach使用    for(i<- arr){      println(i)    }    for(i<- 0 to 10 if i%2==0){        println(i)    //for循环里可以添加if判断语句的,scala的循环表达式中没有break和continue,但可以通过return 来实现    } 4.默认参数,带名参数和变长参数    默认参数    def getName(name:String = "JChubby") = {...}    // 调用getName时如果没有传参数,则会使用默认的JChubby   带名参数:    def showNum(x:Int,y:Int):Unit = {...}   调用该方法时,参数可以不按顺序,但是要执行参数名:   showNum(y = 2,x = 4)   变长参数:   def canChangeLength(x:Int*) = {...}    canChangeLength(1,2,3,4,...) 5.lazy变量   当使用lazy关键字时,这个常/变量只有在使用的时候才会被分配内存  6.数组   Scala中分为两种:    定长数组:scala.collection.immutable.Array,一旦声明之后长度不可变 

      变长数组:scala.collection.mutable.ArrayBuffer,动态数组

      定长数组:   val arr = new Array[Int](3)//声明长度为3,类型为Int的Array数组(new可省略)   val arr1= Array[Int] (3)   val arr2=Array(1,2,3) //或者声明时直接赋值,编译器会自动推断类型为Int    //通过下标访问数组的方式为()而不是[],请注意!   val a = arr(0) 7.变长数组的使用    val arrBuf=ArrayBuffer[Int]()        arrBuf+=1              //添加元素        arrBuf+=(1,2,3)        //一次性添加多个        arrBuf++=Array(1,2,3)  //使用++=可以直接添加一个数组        arrBuf.insert(0,1,2,3) //在指定位置插入若干个元素,在0位置插入1,2,3        arrBuf insert(0,1,2,3) //Scala中的函数除了通过.来调用之外也可以直接写成这一形式,//之前的1 to 10 其实就是调用了1.to(10)这个to方法        arrBuf remove 0       //移除指定位置的元素        arrBuf remove (0,3)   //移除指定位置后的连续n个元素

           arrBuf trimEnd 3      //删除末尾的n个元素

    8. 和数组一样,Map同样也分为可变和不可变两种      不可变Map的使用:     val myMap=Map("JC"->22,"Lo"->21) //声明一个Map,包含两个键值对,->表示键值对应的关系,不可变的Map中,一旦声明之后,该Map不可添加不可删除不可修改,只能查看,查看方式与可变Map一致     可变Map的使用:         val myMutableMap=scala.collection.mutable.Map("JC"->22,"Lo"->21)         myMutableMap+=("abc"->12,"bcd"->13) //添加元素         myMutableMap-="abc"//删除元素         myMutableMap("JC")=10//修改元素         myMutableMap+=("JC"->11)//修改元素         myMutableMap("JC")//查找元素         myMutableMap getOrElse("JC",-1)//查找元素         for((k,v)<- myMutableMap){//遍历,使用的是k,v格式来进行遍历           println(k+":"+v)         }         for((k,_)<- myMutableMap){//如果只要遍历k或者v,可以使用_占位符           println(k)         }         myMutableMap.keySet//获取所有的key         myMutableMap.values//获取所有的value 9 元组其实就是一个集合,但是可以存放各种不同类型的数据    val group=(1,2,"JC",3.0)   group._1 //通过下标访问元组的格式为:元组名._下标 或者 元组名 _下标。如:   group _1   for(element <- group.productIterator){//遍历元组格式为,productIterator为固定格式不可少        .....        } 10 值函数   Scala中可以将函数赋值给一个变量,这个变量就称为值函数

      var resFunc=add _  //格式为方法名+空格+_

      resFunc(1,2)       //之后可以将这个变量当做方法来用

    11 匿名函数:    顾名思义,没有名字的函数,定义格式如下:     (参数名:参数类型,…) => 表达式     //   例如scala.collection.mutable.ArrayBuffer的map方法,其参数要求是一个匿名函数      arrBuf.map((x:Int)=>x+3) 12 函数柯里化      函数柯里化就是将原本有 很多参数 的函数,分成一个个只有 一个参数 的函数,每个函数的返回值都是 一个表达式 并且当做参数 传到下一个函数      柯里化是闭包的典型体现 13 高阶函数示例    数组的map函数     arr.map(1+_) //_表示数组中的每个元素,执行的结果为每个元素+1    数组的filter函数     arr.filter(_>2)//_ > 2会将数组中大于2的元素过滤出来    数组的reduce函数    arr.reduce(_+_)//reduce是迭代运算,将数组中两个元素先执行操作,把结果作为一个元素继续和下一个元素进行操作,执行结果为:1+2=3,3+3=9,也就是求和 14.list序列      val list=List(1,2,3)       list.head//获取头元素       list.tail//获取除了头元素之外的其他元素       7::list//新增元素//注意,::运算符是从右向左的       list.take(2)//获取前n个元素       val list1=List(1,2,3)       list.zip(list1) //得到的结果为List((1,a),(2,b),(3,c)),如果两个list的长度不同,以比较短的为基础       val list2=List(List(1,2),List(2,3),List(3,3))       list2.flatten //得到的结果为List(1,2,2,3,3,4),用于将嵌套List组合成一个新的List       list2.flatMap(_.map(_*2))//跟flatten相比,flatmap在组合之前,会先对每个子List进行map操作 15.case class和模式匹配:       case class又称为样例类,和普通的类相比,样例类不用new就可以实例化,默认执行的是apply方法来构造对象
    转载请注明原文地址: https://ju.6miu.com/read-17511.html

    最新回复(0)