美文网首页
Scala中常用特殊符号

Scala中常用特殊符号

作者: 井底蛙蛙呱呱呱 | 来源:发表于2021-12-05 13:51 被阅读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

参考:
https://www.zybuluo.com/boothsun/note/1014438

相关文章

网友评论

      本文标题:Scala中常用特殊符号

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