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

一 Tuple 元祖
1,在sclal中有用的容器对象是元祖: Tuple, 元组是 n 个对象的一个聚集( Map n=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), 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>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值