scala函数,方法,数组,集合基础使用说明

scala的高阶函数
1、函数和方法二则都是在定义逻辑
方法
def sum_m(a:Int,b:Int):int=a+b
函数
val sum_f:(Int,Int)=>Int=(x,y)=>x+y
函数和方法可以互换
方法可以转为函数:
val f1=sum_m
函数可以转为方法:
def m1=sum_m
2、高阶函数的定义

(方法|函数)f可以作为(方法|函数)ff的参数,也可以作为(方法|函数)ff的返回值
方法和函数就是执行逻辑
高阶函数的通俗解释
	1、可以把一段逻辑当做参数,传递给另一段处理逻辑
	2、也可以让某一段处理逻辑的返回值,就是一个函数
方法可以作为方法的参数
函数可以作为方法的参数
方法可以作为函数的参数
函数可以作为函数的参数
方法可以作为方法的返回值
函数可以作为方法的返回值
方法可以作为函数的返回值
函数可以作为函数的返回值

	object Basics_Day01 {
	  def main(args: Array[String]): Unit = {
		//调用m1方法传入f1函数
		val  a= m1(f1)
		println(a)
		//调用m1方法传入f2函数
		val a1=m1(f2)
		println(a1)
		//调用m2方法传入f1函数
		val  b= m2(f1,2,4)
		println(b)
		//调用m2方法传入f2函数
		val b1=m2(f2,3,4)
		println(b1)
		//调用m2方法传入m3函数
		println(m2(m3,2,4))

	}
	  /**定一个方法
		* 方法的参数是个函数,函数的参数是两个int类型
		* 返回值为int类型
		*/
	  def m1(f:(Int,Int)=>Int):Int=f(1,2)
	  //定义一个计算数据可变的函数
	  def m2(f:(Int,Int)=>Int,x:Int,y:Int):Int=f(x,y)
	  //定义一个需要两个Int类型参数的方法
	  def m3(a:Int,b:Int):Int=a+b
	  //定义一个函数,参数类型是两个int类型,返回值是一个int类型
	  val f1=(x:Int,y:Int)=>x+y
	  val f2=(a:Int,b:Int)=>a*b

	}

数组
定长数组
package com.liu.meng.day13

	/**
	  * scala的数组的学习
	  * 定长定长数组和可变数组
	  * 定长数组Arrray
	  * 定长数组没有add,inster,remove操作只能修改某个位置的元素的值,要实现删除
	  * 可以通过过滤生成新的 Array 的方式来删除不要的元素
	  * 可变数组ArrayBuffer
	  * 可变数组可以进行增加,删除等操作
	  *
	  * 定长数组和可变数组之间的转换 通过调用toBuffer()和toArray()来实现
	  *
	  */
	object ArrayClass {
	  def main(args: Array[String]): Unit = {
	 //初始化一个数组
		val arr=Array(1,2,3,4,5,6,7,8)

		//增强for循环
		for (i<-arr){
		  println(i)
		}
		println("=============================")

		//使用to可以生成一个序列作为脚标
		for (i<-(0 to arr.length-1)){
		  println(arr(i))
		}
		println("=============================")

		for (i<-(0 until arr.length)){
		  println(arr(i))
		}
		println("=============================")

		//步长为2
		for (i<-0 until (arr.length,2)){
		  println(arr(i))

		}
		println("=============================")

		//反转
		for (i<-(0 until arr.length).reverse){
		  println(arr(i))
		}
		println("=============================")

        //数组转换将偶数取出乘以10以后在生成一个新数组
		val res=for (e<-arr if e%2==0)yield e * 10
		println(res.toBuffer)

		println("===============")
		//更高级写法,filter 是过滤,接收一个返回值为boolean的函数
		//map相当于将数组中的每一个元素取出来,应用传进去的函数
		val r=arr.filter(_%2==0).map(_*10)
		println(r.toBuffer)
		
		//数组中的常用算法
		//求和
		println(arr.sum)
		//最大值
		println(arr.max)
		//最小值
		println(arr.min)
		//返回带有集合元素信息的集合名称
		println(arr.toString)
		//数组转为字符串
		println(arr.mkString())
		//数组转为字符串指定分隔符
		println(arr.mkString(“,”))
		//数组转为字符串指定分隔符和前后标记
		println(arr.mkString(“<”,“,”,“>”))
	  }
	}

集合
不可变集合
package com.liu.meng.day13

	/**
	  * scala集合简单操作
	  * scala集合有三大类序列Seq,集合Set,映射Map所有集合都扩展自iterable特质
	  * scala集合有可变(mutable)和不可变(immutable)两种类型
	  *
	  *
	  */
	object AggregateClass {
	  def main(args: Array[String]): Unit = {
		/**List序列
		*在scala中列表要么为空(NIl表示空列表)要么是一个head元素加上一个tail列表
		*9::List(5,2) ::操作符是将给定的头和尾创建一个新的列表
		*注意 ::操作符是右结合的,例如9::5::2::NIL相当于9::(5::(2::Nil))
		*/
		  //创建集合
		val list1=List(1,2,3)
		val list2=0::list1
		val list3=list1.::(0)
		val list4=0+:list1
		val list5=list1.+:(0)
		val list6=list1:+3
		val ls0=List(4,5,6)
		//集合合并
		val ls2=ls0++list1
		//将list1插入到ls0前
		val ls3=ls0++:list1
		//将list1插入到ls0前
		val ls4=list1.:::(ls0)
		println(ls4)
		//取列表最后一个元素
		println(list1.last)
		//取除了最后一个元素以外的元素
		println(list1.init)
		//反转
		println(list1.reverse)
		//截取前n个元素
		println(list1.take(2))
		//丢弃前n个元素
		println(list1.drop(1))
		//分割成2列表有第一个列表有n个元素
		println(ls4.splitAt(4))
	   //输出
		println(list1.toString())
		//转为String
		println(list1.mkString)
		//转为数组
		println(list1.toArray.toBuffer)
	  }
	}

可变列表

    package com.liu.meng.day13

	import scala.collection.mutable.ListBuffer

	/**
	  * 可变列表List
	  */
	object ArregateClass1 {
	  def main(args: Array[String]): Unit = {
		//创建可变列表
	val list0=ListBuffer[Int](1,2,3)
		//创建空的可变列表
		val list1=new ListBuffer[Int]
		//向集合中追加元素和、未生成新的集合
		list1+=4
		list1.append(5)
		//将list1中的元素追加到list0中,未生成新的集合
		list0++=list1
		//生成新集合
		val  list2=list0++list1
		val list3=list1:+5

	  }
	}

Set集合
package com.liu.meng.day13

	import scala.collection.immutable.HashSet
	import scala.collection.mutable

	/**
	  * set集合
	  */
	object AggregateSet extends  App {
		//不可变set
		val set1=new HashSet[Int]()
		//生成新的Set
		val set2=set1+4
		//set中的元素不能重复
		val set3=set2++Set(5,6,7)
		val set4=Set(1,3,4)++set1
		println(set4)

		  //创建一个可变的 HashSetval
	  val  set5 = new mutable.HashSet[Int]()
		  //向 HashSet 中添加元素
		  set5 += 2
		  //add 等价于+=
		  set5.add(4)
		  set5 ++= Set(1,3,5)
		  println(set1)
		  //删除一个元素
		  set5 -= 5
		  set5.remove(2)
		  println(set5)
	}

MAP集合

		package com.liu.meng.day13

		import scala.collection.mutable

		object MapClass  extends  App {
		  //创建Map
		val map1=new mutable.HashMap[String,Int]()
		  //向map中添加数据
		  map1.put("aa",1)
		  map1("b")=2
		  map1+=(("c",1))
		  println(map1)
		  //移除数据
		  map1-="aa"
		  map1.remove("b")
		  println(map1)
		  //修改数据
		  map1("c")=100
		  println(map1)
					  
		}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值