scala基础操作笔记

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)))

}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,634评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,951评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,427评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,770评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,835评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,799评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,768评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,544评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,979评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,271评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,427评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,121评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,756评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,375评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,579评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,410评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,315评论 2 352