一 Tuple 元祖
1,在sclal中有用的容器对象是元祖: Tuple,
元组是
n
个对象的一个聚集(
Map
是
n=2
个对象的聚集),与列表一样,元素也是不可变的,但与列表不同,在一个
元祖可以包含不同类型的元素。所以在scala用的非常多。
2,实例化: val tuple_test = (100, "Scala", "Spark")
3,可以通过点号,下划线,-N(N从1开始)的索引访问元素
object TupleOps {
def main(args: Array[String]): Unit = {
val triple = (100, "Scala", "Spark")
println(triple._1)
println(triple._2)
println(triple._3)
}
}
元祖可以同时拥有Int 和 String. 这点与java不同,如果在java中,需要经常创建一个javaBean的类去装多个返回值,而在Scala中就可以简单地额返回一个元祖。这样做就简单了许多,实例化一个装有一些新对象的新元祖,只要把这写对象放在括号里,并用都好分隔即可。
二 Array 数组
scala里面的数组和java里面的比较类似,但是又有些不同,数组的初始化方法比java里面多了一种方式,具体如下:
object ArrayOps {
def main(args: Array[String]) {
val array = Array(1,2,3,4,5)
for(i <- 0 until array.length){
println(array(i))
}
}
}
可以看出索引是从0开始的,到 (array的长度-1)结束的,这点和C,Java都是一样的。运行代码得到如下结果,打印出数组 array里的元素。
1
2
3
4
5
也可以通过另外一种方式打印数组,通过 <-箭头访问数组,遍历数组里的元素。
object ArrayOps {
def main(args: Array[String]) {
val array = Array(1,2,3,4,5)
for(elem <- array) println(elem)
}
}
打印出数组 array里的元素
1
2
3
4
5
三 Map 映射
Scala中
Map
是对偶(算是键值对的另一个说法吧)的集合。任何值可以根据它的键进行检索。键是在映射唯一的,但值不一定是唯一的。映射也被称为哈希表。
->
操作符用来创建对偶,
"Alice" -> 10
产出
("Alice", 10),
即
key
和
values。
例如 val map=Map(“Xiaoming”->1,”Xiaomei”->2,”Xiaofang”->3)。
1、更改对偶:
(1)可变的Map,更改某个已有的值,或者是添加一个没有的对偶:
scores("scala") = 7
(2)添加多个对偶,使用“+=”操作符:
Score+=(“hadoop”->3,”spark”->5, ...)
(3)移除某个对偶,使用“-=”操作符:
Score-=“hadoop”
(4)不可变的Map来说,操作基本都会是返回一个新的Map:
// 获取一个添加了新对偶的Map
val newScores = scores + ("Bob" -> 10, "Fred" -> 7)
// 获取一个移除了对偶的Map
val newScores = scores - "Alice"
2、获取Map中的值
val bobsScore = scores("scala")
若Map中没有包含这个键值对,会抛出一个异常。用 contains()方法来检查是否包含指定的键。
val bobsScore=if(scores.contains(“scala”))scores(“scala”)else 0
或:val bobsScore = scores.getOrElse("Bob", 0)
3、迭代map
for ((k, v) <- map)
for (k <- map.keySet) // 单独拿出键
for (v <- map.values) // 单独拿出值
对于Map映射的索引,我们通常是用for循环,通过(key,value)<-map进行键值对的赋值。然后通过输出key和value来显示它。
object MapOps {
def main(args: Array[String]) {
val ages = Map("Andy" -> 27, "Spark" -> 5)
for((k,v) <- ages){
println("Key is " + k + ",value is " + v)
}
/*
for((k,_) <- ages){ //placeholder
println("Key is " + k)
}*/
}
}
这段代码是打印出映射对应的key和value ,运行代码
Key is Andy,value is 27
Key is Spark,value is 5
四 文件的操作
1) 使用 scala.io包下的Source类读取硬盘上的具体文件,此处打印的是 Wangzisheng.txt文件,读取每行的内容并打印到屏幕,代码如下所示:
object FileOps {
def main(args: Array[String]) {
val file = Source.fromFile("E:\\Wangzisheng.txt")
for (line <- file.getLines){
println(line)
}
}
}
注意: 读取的文本文件要经过 UTF-8转码,否则很可能代码包 异常
2)打印制定网址的内容
使用Source.formUrl()方法访问某个网站,读取网页内容并打印到屏幕。
object FileOps {
def main(args: Array[String]) {
val file = Source.fromURL(
" https://www.baidu.com/")
for (line <- file.getLines){
println(line)
}
}
}
打印结果如下所示:
<html>
<head>
<script>
location.replace(location.href.replace("https://","http://"));
</script>
</head>
<body>
<noscript><meta http-equiv="refresh" content="0;url=http://www.baidu.com/"></noscript>
</body>
</html>