scala-03:Tuple、Array、Map与file文件操作入门实战

来源:互联网 发布:英雄连2 武器数据 编辑:程序博客网 时间:2024/05/16 19:01

一 Tuple 元祖
1,在sclal中有用的容器对象是元祖: Tuple,元组是n个对象的一个聚集(Mapn=2个对象的聚集),与列表一样,元素也是不可变的,但与列表不同,在一个元祖可以包含不同类型的元素。所以在scala用的非常多。

2,实例化: val tuple_test = (100, "Scala", "Spark")

3,可以通过点号,下划线,-NN1开始)的索引访问元素

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),keyvalues例如 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>

0 0
原创粉丝点击