Scala符号总结

作者: Teci | 来源:发表于2019-01-11 14:38 被阅读2次
  • ::: 运算符, 三个连续的冒号代表List的连接操作
val list1=List[Int](1,2,3,4,5)
val list2=List[Int](6,7,8,9,10)
val list3=list1:::list2
println(list3)      //List(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

//除此之外, 连接List还可以通过List.concat, concat的接收变量是*, 故不限制传入的List的数量, 不同类型的也可以
println(List.concat(List(1,2,3),List(4,5,6),List("a","b","c")))

//不过如果是Array的concat, 其只能传相同类型的Array
println(Array.concat(Array(1,2,3),Array(4,5,6),Array("a","b","c"))) //会报错
  • :: 运算符, 该方法被称为cons, 即构造, 一般用来向List的头部追加元素, 无论该元素是什么类型, 其都将作为一个整体出现在List的头部
val list=1::(2::(3::Nil))     //List(1,2,3), 即嵌套连接, Nil为一个空的List, 即List[Nothing]
println(List(6,7,8)::list)   //List(List(6, 7, 8), 1, 2, 3)
println(6::list)            //List(6, 1, 2, 3)

//上述写法等价于(注意在.::后的元素需要用括号括起来)
println(list.::(List(6,7,8)))   //List(List(6, 7, 8), 1, 2, 3)
println(list.::(6))             //List(6, 1, 2, 3)
  • :+和+: 两者的区别在于, :+方法用于在尾部追加元素,+:方法用于在头部追加元素。其中 +: 和 :: 很类似,但是 :: 可以用于pattern match ,而+:则不行。关于+:和:+, 记住冒号永远靠近集合类型。
var list=(1::(2::(3::Nil)))
var new_list= (6) +: list .+: (8)
var super_list=new_list :+ list
println(new_list)         //List(6, 8, 1, 2, 3)
println(super_list)       //List(6, 8, 1, 2, 3, List(1, 2, 3))
  • 四则运算 +-*/ , scala的概念是万物皆函数, 四则运算本身也是函数, 例如 1+2, 相当于是 1.+2, 即操作符本身就是函数, 1调用其加函数, 传入2作为参数。
val add=(_:Int)+(_:Int) //注意此处的下划线后需要声明类型, 因为此处无法自动推断类型
println(add(1,2))     //3

//而对于前缀操作符, 前缀操作符只支持+-!~四种, 如下:
-1
  1.unary_-
+1
  1.unary_+
!false
  false.unary_!
~0xFF
  0xFF.unary_~
  • => 一般用于创建匿名函数实例, 相当于一个语法糖, x=>y 相当于输入x返回y
val list=List(("a",10),("b",5),("a",3),("b",7),("b",1),("a",2))
//下面的每一次=>都相当于一个匿名函数, 将list中的a和b分别求其总数, 其中reduce改为reduce(_+_)也行
val new_list=list.groupBy(x=>x._1).mapValues(x=>x.map(x=>x._2).reduce((x,y)=>x+y)).toList

new_list.foreach(println)
  • -> 所有scala对象都有的方法, A->B就相当于返回一个二元组 (A,B)
println((3->5))   //(3,5)
  • <- 常用于for循环中, 遍历
for(a<-Array(1,2,3,4,5))println(a)
  • _ 的作用归纳如下
//替换某个变量
val add=(_:Int)+(_:Int)
Array(1,2,3,4,5).filter(_>3).foreach(println) //4,5

Array(1,2,3,4,5).reduce((x,y)=>x+y)
Array(1,2,3,4,5).reduce(_+_)

Array(1,2,3,4,5).sortWith(_>_)  //Array[Int] = Array(5, 4, 3, 2, 1)

//替换整个参数列表
def sum(a:Int,b:Int,c:Int) = a + b + c
var a = sum _     //注意此处sum和下划线之间要有个空格
a(1,2,3)

//替换部分参数
var b = sum(1,_:Int,3)
println(b(2))  //6

//用在match-case中作为default case
val x=3
val result=x match {
    case 1 => "one"
    case 2 => "two"
    case _ => "many"
  }
println(result) //many

//元组匹配
val t = (1, 3.1415, "ABC")
println(t._1)   //1
println(t._2)   //3.1415
println(t._3)   //ABC

//将区间转化为参数序列
def sum(args:Int*)={
  var result=0
  args.foreach(x=>result+=x)
  result
}
println(sum(1 to 5: _*))  //此处将1 to 5转化为了参数序列

//_*替换不需要的元素
val arr = Array(1,2,3,4,5)
val Array(one,two,_*)=arr
println(one,two)    //(1,2), 即将Array中的1,2取出来赋值给one和two

//通配符
import scala.math._

//标识符, 无特殊含义
val _a=10

相关文章

  • Scala符号总结

    ::: 运算符, 三个连续的冒号代表List的连接操作 :: 运算符, 该方法被称为cons, 即构造, 一般用来...

  • Scala 符号化

    “<-”符号:这个符号<-用在什么地方,比如用于for循环,<-用于遍历集合对象(可遍历对象)B,在每次遍历的过程...

  • scala:scala vs java

    标识符 scala可以使用特殊符号作为标识符 操作符 scala中没有++、--操作符,通过+=、-=实现 关系运...

  • 搭建scala开发环境

    最近总结了下scala的基础知识,分享下 scala简介 spark的原生语言是Scala,具体的大家可以自行百度...

  • Scala的自定义类型标记

    Scala的自定义类型标记 Scala中有很多千奇百怪的符号标记,看起来是那么的独特,就像是一杯dry marti...

  • 初试python

    弄完java scala ,再来弄python 何时才有入门的体验 Numbers(数字):int(有符号整型)l...

  • map & flatMap in scala

    用scala有段时间了,这篇文章是想总结一下map和flapMap的原理和用法 Scala Native map ...

  • 【Scala基础】相关环境运维

    终于有时间总结大数据有关的知识了,先从Scala开始吧(⊙o⊙) 简介 关于Scala,有以下特点 基于JVM运行...

  • 一 scala

    scala的特殊符号 <- 遍历,相当于to ->2.1 ->是所有对象都有的一个方法.比如 A->B, ->方...

  • Kotlin操作符号用法大全

    Kotlin操作符、运算符号用法大全 前言:)Scala :想解决Java表达能力不足的问题Groovy :想解...

网友评论

    本文标题:Scala符号总结

    本文链接:https://www.haomeiwen.com/subject/rlsxdqtx.html