object funcextends App {
def hi(name:String):String = {
s"my name is ${name}"
}
def add(x: Int, y: Int) = x + y
println(add(1,2))
println(hi("哈哈哈哈"));
val l =List("alice","bob","cathy");
//遍历元素打印
for (
s <-l //generator
)println(s)
//如果s长度大于3
for {
s <-l
if (s.length >3)//filter
}println(s)
val result_for =for {
s <-l;
s1 = s.toUpperCase()
if (s1 !="")
}yield (s1)//导出
println(result_for)
try {
Integer.parseInt("dog")
}catch {
case _ =>0
}finally {
println("err")
}
val code =1;
val result_match =code match {
case 1 =>"one"
case _ =>"otrhers"
}
println(result_match)
//call by val
def test1(x: Int, y: Int): Int = x * x
//call by name
def test2(x: => Int, y: => Int): Int = x * x
println(test1(3 +4,3));
println(test2(3 +4,3));
def bar(x: Int, y: => Int): Int =1
def loop(): Int =loop()//递归
//由于y没有被用到 所以loop没有执行 所以正常输出
println(bar(1,loop))
//由于loop为死循环 所以导致无法求值
//println(bar(loop, 1))
def operate(f: (Int, Int) => Int) = {
f(4,4)
}
def greeting(age: Int) = (name:String) => {
s"Hello $name,your age is $age"
}
println(greeting(23)("Flygar"));
var sum = (x: Int, y: Int) => x + y;//add是一个具有函数类型的变量
println(sum(1,2))//返回值:Int=3
//柯里化
def curriedAdd(a: Int)(b: Int) = a + b
curriedAdd(2)(2)
//为第二个参数传值 复用curriedAdd
val addOne =curriedAdd(1) _
addOne(2)
//递归函数
def factorial(n: Int): Int = {
if (n <=0)1
else n *factorial(n -1)
}
//尾递归 当编译器检测到一个函数调用是尾递归的时候 他就覆盖当前的活动记录而不是在栈中去创建一个新的
//定义尾递归
@annotation.tailrec
def factorials(n: Int, m: Int): Int =
if (n <=0) m
else factorials(n -1, m * n)
println(factorials(5,1))
//计算fx的和 x为a-b之间的整数
def sumfunc(f: Int => Int)(a: Int)(b: Int): Int = {
@annotation.tailrec
def loop(n: Int, acc: Int): Int = {
if (n > b) {
println(s"n=${n},acc=${acc}")
acc
}else {
println(s"n=${n},acc=${acc}")
loop(n +1, acc + f(n))
}
}
loop(a,0)
}
sumfunc(x => x)(1)(5)
sumfunc(x => x * x)(1)(5)
sumfunc(x => x * x * x)(1)(5)
val sumSquare =sumfunc(x => x * x) _
sumSquare(1)(5)
val a =List(1,2,3,4)
val b =0 ::a
val c ="x" ::"y" ::"z" ::Nil
val e =a :::b :::c
println(e)
//返回第一个元素
println(e.head)
//返回剩下的元素
println(e.tail)
//判断是否为空
println(e.isEmpty)
def walkthru(l:List[Any]):String = {
if (l.isEmpty)" "
else l.head.toString +" " +walkthru(l.tail)
}
println(walkthru(e:List[Any]))
//x为遍历数组中的元素输出奇数 并且加一
println(a.filter(_ %2 ==1).map(_ +1))
//返回数字
println("dsadsa1121zz".toList.filter(x => Character.isDigit(x)))
//当takewhile 没取到B之前循环读取
println("dsadsa1121zz".toList.takeWhile(_ !='B'))
//映射所有元素转为大写
println(c.map(x => x.toUpperCase()))
println(c.map(_.toUpperCase()))
//二维
val q =List(a,List(5,6))
//去除偶数 flatMap返回单维
println(q.flatMap(_.filter(_ %2 ==0)))
//求和 reduce值类型与list类型一致
println(a.reduce(_ + _))
//foldLeft ;初始值类型就是返回值类型
println(a.foldLeft(0)(_ + _))
//Range 大于等于1 小于等于10
println((1 to10 by2).toList)
//Range 大于等于1 小于10
println((1 until10 by2).toList)
//stream
val stream = (1 to1000).toStream
println(stream.head)
println(stream.tail)
val t = (1,"Alice","age","12")
println(t._1)
/*元素长度,元素求和,元素平方和 */
def sumSq(in:List[Int]): (Int, Int, Int) =
in.foldLeft((0,0,0))((t, v) => (t._1 +1, t._2 + v, t._3 + v * v))
println(sumSq(List(1,2,3)))
//map取值
val p =Map(1 ->"David",9 ->"Elwood")
println(p(1))
/*判断values是否存在*/
p.contains(1)
/*取出key*/
p.keys
/*取出values*/
p.values
/*增加一个value用“+”*/
p + (8 ->"Bon")
/*减少一个value用“-”*/
p -1
/*增加多个value用“++”*/
p ++List(2 ->"Jane",5 ->"jack")
/*减少多个value用“--”*/
p --List(1,9,2)
/*增加和减少多个value可以同时用“++”“--”*/
p ++List(2 ->"Jane",5 ->"jack") --List(9,1)
//快速排序
/*输入是一个List,输出是一个排好序Int类型的List */
/*如果List只有一个元素或为空,排序就是本身*/
def qSort(a:List[Int]):List [Int] =if (a.length <2) aelse qSort(a.filter(_ < a.head)) ++ a.filter( _ ==a.head)++qSort(a.filter(_>a.head))
print(qSort(List(4,5,2,6,1,3)))
}
scala基础操作笔记
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...