Scala中常用特殊符号
2021-12-05 本文已影响0人
井底蛙蛙呱呱呱
=> 匿名函数
类似Python中的lambda函数。scala中函数是对象可以赋值给一个变量,而方法则是类的一部分。方法可以转为函数。
// 定义一个函数
val add = (a: Int, b:Int) => {a+b}
// 定义方法
def addm(a:Int, b:Int): Int = { a + b }
// 方法转为函数
val addf = addm _
<- 遍历符号
类似于Python中for循环的in:
for(i <- 1 to 10){ println(i)}
+=和++=
// 对于字符串,两个符号的结果是一样的
var a = "a"
a += "b" // a = "ab"
// 对于可变数组, +=用来添加单个元素,++=用来添加数组
import scala.collection.mutable.ArrayBuffer // 可变数组才支持添加元素操作
var l1 = (1 to 5).toBuffer
var l2 = (6 to 9).toBuffer
l1 += 1 // ArrayBuffer(1, 2, 3, 4, 5, 1)
l1 ++= l2 // ArrayBuffer(1, 2, 3, 4, 5, 1, 6, 7, 8, 9)
-=和--=的操作类似。
:::和::
::和:::只适用于不可变List,并生成一个新的List,对于可变ListBuffer则可以直接使用+=和++=:
import scala.collection.mutable.ArrayBuffer
import scala.collection.mutable.ListBuffer
val l1 = (1 to 5).toList //.to[ListBuffer]
var l2 = (6 to 9).toList.to[ListBuffer]
val l3 = 1::l1 // 返回一个新的List List(1, 1, 2, 3, 4, 5)
// 也可以用:+往末尾添加元素
val l4 = l1 :+ 1 // List(1, 2, 3, 4, 5, 1)
// :::合并两个List
val l5 = l1:::l1 // List(1, 2, 3, 4, 5, 1, 2, 3, 4, 5)
->构造键值对/元组,_n访问元组成员
元组成员访问是从1开始的:
// 定义二元元组
val t1 = 1->2 // (Int, Int) = (1,2)
val t2 = 1->2->3 // ((Int, Int), Int) = ((1,2),3)
// 定义三元元组
val t3 = (1,2,3) // (Int, Int, Int) = (1,2,3)
// 访问元组中的元素
print(t3._1, t3._2, t3._3)
// 构建映射
val m1 = Map(1->2, 3->4) // Map(1 -> 2, 3 -> 4)
_下划线的用法
通配符
类似于Python中的*符号:
import org.apache.spark.sql.types._
作为匿名变量
此种用法仅能在简单情况下使用,若匿名函数中存在复杂嵌套逻辑或多次使用到_则不能使用_来作为变量名
val lst = (1 to 10).filter(_%2==0).toList // List[Int] = List(2, 4, 6, 8, 10)
使用模式匹配可以用来获取键值对的组员
val m = Map(1 -> 2,2 -> 4)
for ((k,_) <- m) println(k) //如果不需要所有部件, 则在不需要的部件使用_; 本例只取key,因此在value处用_
_* 作为一个整体,告诉编译器你希望将某个参数当做数序列处理
常用来选取元素:
val lst = List(...)
df.select(lst.head, lst.tail:_*)
*不定长度参数
def sum(a:Int *): Int = {
var res = 0
for(i <- a) res += i
res
}
sum(1,2,3) // 6