1、数组
// 创建数组
// **** 方式1 ****
val array = Array[String]("a", "b", "c")
// **** 方式2 ****
// (1) 创建类型为String 长度为3的数组
val array1 = new Array[String](3)
// (2) 赋值
array1(0) = "a"
array1(1) = "s"
array1(2) = "d"
- 同Java数组,数组包含的元素数据类型相同
-
scala 数组取值用的是() java用的是[]
遍历数组
// 遍历数组
// 1
for (x <- array) {
println(x)
}
// 2
array1.foreach(x => {
println(x)
})
// 3
for (i <- 0 to (array.length - 1)) {
println(array(i))
}
2、List
// 字符串列表
val list: List[String] = List("百度", "腾讯", "阿里")
// 二维列表
val dim: List[List[Int]] =
List(
List(1, 0, 0),
List(0, 1, 0),
List(0, 0, 1)
)
// 1
for (x <- list) {
println(x)
}
- 元素有序可重复,元素类型可以不同
- Nil 长度为0的list
- 遍历方式与数组相同
- 常用方法:https://www.runoob.com/scala/scala-lists.html
3、Set
// 创建
val set1 = Set(1,2,3,4,4)
val set2 = Set(1,2,5)
// 注意:set会自动去重
set1.foreach(println)
println("====")
for(s <- set1) {
println(s)
}
- 元素无序,不可重复
- 创建后set会自动去重
- 遍历方法同数组、List
- 常用方法:https://www.runoob.com/scala/scala-sets.html
4、Map
// 创建
var map = Map("1" -> "a", 2 -> "b", (3, "c"))
// 添加 键值对
map += ("k1" -> "V1")
map += ("k2" -> "V2")
// 取值
println(map.get("1"))
println(map.get("1").get)
println(map.get("6").getOrElse("no value"))
println("map 中的键为 : " + map.keys)
println("map 中的值为 : " + map.values)
println("检测 map 是否为空 : " + map.isEmpty)
// map 遍历
for (x <- map) {
println(x) // x 是一个元组
println("key: " + x._1 + "\tvalue: " + x._2)
}
map.foreach(x => {
println("key: " + x._1 + "\tvalue: " + x._2)
})
map.keys.foreach(key => {
println("key:" + key + ", value:" + map.get(key).get)
})
- map中的每一个元素都是一个二元组
- 如果需要添加 key-value 对,可以使用 + 号
- 基本操作:keys、values、isEmpty
- 可以使用 ++ 运算符或 Map.++() 方法来连接两个 Map,Map 合并时会移除重复的 key。
++
例:map1.++(map2)
map1中加入map2++:
例:map1.++:(map2)
map2中加入map1
- 常用方法:https://www.runoob.com/scala/scala-maps.html
filter
:过滤,留下符合条件的记录count
:统计符合条件的记录数contains
:map中是否包含某个keyexist
:符合条件的记录存在不存在
5、元组
// 创建元组
val t = (1, 3.14, "Fred")
val t1 = new Tuple4(2, 4.14, "Fred1", "fff")
val t2 = Tuple4(2, 4.14, "Fred2", "dddd")
val t22 = new Tuple22(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22)
val sum = t22._1 + t22._2 + t22._3 + t22._10
println("元素之和为: " + sum)
// 迭代元组
t2.productIterator.foreach(i => {
println("Value = " + i)
})
// 元组转为String
println("连接后的字符串为: " + t.toString() )
- 与列表一样,元组不可变,但与列表不同在于,元组可以包含不同类型的元素。
- 元组的值通常是通过单个的值包含在圆括号中构成的
- 元组的实际类型取决于它的元素的类型
- 目前Scala支持的元组最大长度为22.对于更大长度可以使用集合,或者扩展元组。
- 用 "._xx" 获取元祖中的值
- Tuple.productIterator() 方法来迭代输出元组的所有元素
6、Option(选项)
Scala Option(选项)类型用来表示一个值是可选的(有值或无值)。
Option[T] 是一个类型为 T 的可选值的容器:
- 如果值存在, Option[T] 就是一个 Some[T]
- 如果不存在, Option[T] 就是对象 None
val myMap: Map[String, String] = Map("key1" -> "value")
val value1: Option[String] = myMap.get("key1")
val value2: Option[String] = myMap.get("key2")
println(value1) // Some("value")
println(value2) // None
在上面的代码中,myMap 一个是一个 Key 的类型是 String,Value 的类型是 String 的 hash map,但不一样的是他的 get() 返回的是一个叫 Option[String] 的类别。
Scala 使用 Option[String] 来告诉你:「我会想办法回传一个 String,但也可能没有 String 给你」。
myMap 里并没有 key2 这笔数据,get() 方法返回 None。
Option 有两个子类别,一个是 Some,一个是 None,当他回传 Some 的时候,代表这个函式成功地给了你一个 String,而你可以透过 get() 这个函式拿到那个 String,如果他返回的是 None,则代表没有字符串可以给你。
常用方法:https://www.runoob.com/scala/scala-options.html
- isEmpty()
- getOrElse()