SCALA 基础操作篇1

1.默认参数

在Scala中,有时我们调用某些函数时,不希望给出参数的具体值,而希望使用参数自身默认的值,此时就定义在定义函数时使用默认参数

def sayHello(firstName: String, middleName: String = "William", lastName: String = "Croft") = firstName + " " + middleName + " " + lastName 
如果给出的参数不够,则会从作往右依次应用参数。

2.函数

在调用函数时,也可以不按照函数定义的参数顺序来传递参数,而是使用带名参数的方式来传递。

sayHello(firstName = "Mick", lastName = "Nina", middleName = "Jack") 
还可以混合使用未命名参数和带名参数,但是未命名参数必须排在带名参数前面。
sayHello("Mick", lastName = "Nina", middleName = "Jack")

3.变长参数

在如果想要将一个已有的序列直接调用变长参数函数,是不对的。比如val s = sum(1 to 5)。此时需要使用Scala特殊的语法将参数定义为序列,让Scala解释器能够识别。这种语法非常有用!

val s = sum(1 to 5: _*),起作用是将1 to 5 的range变成单个的值

4.定义函数

在Scala中,定义函数时,如果函数体直接包裹在了花括号里面,而没有使用=连接,则函数的返回值类型就是Unit。这样的函数就被称之为过程。过程通常用于不需要返回值的函数。

过程还有一种写法,就是将函数的返回值类型定义为Unit。
def sayHello(name: String) = "Hello, " + name
def sayHello(name: String) { print("Hello, " + name); "Hello, " + name }
def sayHello(name: String): Unit = "Hello, " + name

5.数组

scala 中的 数组是定长的,一旦定义就不能改长度,如果需要类似于Java中的ArrayList这种长度可变的集合类,则可以使用ArrayBuffer

// 如果不想每次都使用全限定名,则可以预先导入ArrayBuffer类
import scala.collection.mutable.ArrayBuffer
// 使用ArrayBuffer()的方式可以创建一个空的ArrayBuffer
val b = ArrayBuffer[Int]()
// 使用+=操作符,可以添加一个元素,或者多个元素 b += 1 b += (2, 3, 4, 5)
// 使用++=操作符,可以添加其他集合中的所有元素 b ++= Array(6, 7, 8, 9, 10)
// 使用trimEnd()函数,可以从尾部截断指定个数的元素  b.trimEnd(5)
// 使用insert()函数可以在指定位置插入元素    但是这种操作效率很低,因为需要移动指定位置后的所有元素  b.insert(5, 6) b.insert(6, 7, 8, 9, 10)
// 使用remove()函数可以移除指定位置的元素  b.remove(1) b.remove(1, 3)
// Array与ArrayBuffer可以互相进行转换  b.toArray a.toBuffer
// 使用“增强for循环”遍历Array / ArrayBuffer    for (e <- b)
// 数组元素 val a = Array(1, 2, 3, 4, 5)   求和val sum = a.sum 最大值 val max = a.max  排序 scala.util.Sorting.quickSort(a)
// 获取数组中所有元素内容 全拼接a.mkString 分隔符a.mkString(", ") 左右分隔符:a.mkString("<", ",", ">") toString函数 a.toString b.toString

6.Map&TUPLE
// 创建一个不可变的Map  val ages = Map("Leo" -> 30, "Jen" -> 25, "Jack" -> 23)
// 创建一个可变的Map  val ages = scala.collection.mutable.Map("Leo" -> 30, "Jen" -> 25, "Jack" -> 23)
// 使用另外一种方式定义Map元素 val ages = Map(("Leo", 30), ("Jen", 25), ("Jack", 23))
// 创建一个空的HashMap  val ages = new scala.collection.mutable.HashMap[String, Int]
// 获取指定key对应的value,如果key不存在,会报错  使用contains函数检查key是否存在 val leoAge = if (ages.contains("leo")) ages("leo") else 0
// 解决报错问题:getOrElse函数val leoAge = ages.getOrElse("leo", 0)
// 更新Map的元素 单个:ages("Leo") = 31  多个:ages += ("Mike" -> 35, "Tom" -> 40)
// 移除元素 ages -= "Mike"
// 更新不可变的map val ages2 = ages + ("Mike" -> 36, "Tom" -> 40)(生成新的不可变map)
// 移除不可变map的元素  val ages3 = ages - "Tom"
// 遍历map的entrySet  for ((key, value) <- ages) println(key + " " + value)
// 遍历map的key  for (key <- ages.keySet) println(key)
// 遍历map的value  for (value <- ages.values) println(value)
// 生成新map,反转key和value for ((key, value) <- ages) yield (value, key)
// SortedMap可以自动对Map的key的排序 val ages = scala.collection.immutable.SortedMap("leo" -> 30, "alice" -> 15, "jen" -> 25)
// LinkedHashMap可以记住插入entry的顺序
val ages = new scala.collection.mutable.LinkedHashMap[String, Int]
ages("leo") = 30
ages("alice") = 15
ages("jen") = 25
// 简单Tuple val t = ("leo", 30)
// zip操作
val names = Array("leo", "jack", "mike")
val ages = Array(30, 24, 26)
val nameAges = names.zip(ages)
for ((name, age) <- nameAges) println(name + ": " + age)

猜你喜欢

转载自blog.csdn.net/weixin_42553458/article/details/80946726