快学Scala 第四章习题答案

1.设置一个映射,其中包含你想要的一些装备,以及它们的价格。然后构建另一个映射,但在价格上打9折。

scala> val map = Map("book"->10,"pen"->20,"ipad"->30)
map: scala.collection.immutable.Map[String,Int] = Map(book -> 10, pen -> 20, ipa
d -> 30)

scala> for((k,v)<-map) yield (k,v*0.8)
res0: scala.collection.immutable.Map[String,Double] = Map(book -> 8.0, pen -> 16
.0, ipad -> 24.0)

2.编写一段程序,从文件中读取单词。用一个可变映射来清点每一个单词出现的频率,最后打印出所有单词和它们出现的次数。

scala> val source = Source.fromFile("F:\\1.txt")
source: scala.io.BufferedSource = non-empty iterator

scala> val tokens = source.mkString.split("\\s+")
tokens: Array[String] = Array(ddd, haha, ddd, eee, eee, eee, ddd, ddd, haha, kkk
)

scala> val time = new scala.collection.mutable.HashMap[String,Int]
time: scala.collection.mutable.HashMap[String,Int] = Map()

scala> for(key <- tokens){
     | time(key) = time.getOrElse(key,0) + 1
     | }

scala> time.mkString(",")
res7: String = haha -> 2,kkk -> 1,eee -> 3,ddd -> 4

3.重复前一个联系,这次用不可变的映射。

scala> import scala.io.Source
import scala.io.Source

scala> val source = Source.fromFile("F:\\1.txt")
source: scala.io.BufferedSource = non-empty iterator

scala> val tokens = source.mkString.split("\\s+")
tokens: Array[String] = Array(ddd, haha, ddd, eee, eee, eee, ddd, ddd, haha, kkk
)

scala> val times = new scala.collection.immutable.HashMap[String,Int]
times: scala.collection.immutable.HashMap[String,Int] = Map()

scala> var times = new scala.collection.immutable.HashMap[String,Int]
times: scala.collection.immutable.HashMap[String,Int] = Map()

scala> for(key <- tokens){
     | times+= (key -> (times.getOrElse(key,0) + 1))
     | }

scala> times.mkString(",")
res9: String = kkk -> 1,ddd -> 4,eee -> 3,haha -> 2

4.重复前一个联系,这次用已排序的映射,以便单词可以按顺序打印出来。

scala> import scala.io.Source
import scala.io.Source

scala> val source = Source.fromFile("F:\\1.txt")
source: scala.io.BufferedSource = non-empty iterator

scala> val tokens = source.mkString.split("\\s+")
tokens: Array[String] = Array(ddd, haha, ddd, eee, eee, eee, ddd, ddd, haha, kkk
)

scala> val times = new scala.collection.immutable.HashMap[String,Int]
times: scala.collection.immutable.HashMap[String,Int] = Map()

scala> var times = new scala.collection.immutable.HashMap[String,Int]
times: scala.collection.immutable.HashMap[String,Int] = Map()

scala> for(key <- tokens){
     | times+= (key -> (times.getOrElse(key,0) + 1))
     | }

scala> times.mkString(",")
res9: String = kkk -> 1,ddd -> 4,eee -> 3,haha -> 2

5.重复前一个联系,这次用java.util.TreeMap并使之适用于Scala API。

scala> val source = Source.fromFile("F:\\1.txt")
source: scala.io.BufferedSource = non-empty iterator

scala> val tokens = source.mkString.split("\\s+")
tokens: Array[String] = Array(ddd, haha, ddd, eee, eee, eee, ddd, ddd, haha, kkk
)

scala> import scala.collection.JavaConversions.mapAsScalaMap
import scala.collection.JavaConversions.mapAsScalaMap

scala> val time:scala.collection.mutable.Map[String,Int] = new java.util.TreeMap
[String,Int]
time: scala.collection.mutable.Map[String,Int] = Map()
scala> }for(key <- tokens){
<console>:1: error: eof expected but '}' found.
       }for(key <- tokens){
       ^

scala> for(key <- tokens){
     | time(key) = time.getOrElse(key,0) + 1
     | }

scala> time.mkString(",")
res14: String = ddd -> 4,eee -> 3,haha -> 2,kkk -> 1

6.定义一个链式哈希映射,将“Monday”映射到java.util.Calendar.MONDAY.以此类推加入其他日期。展示元素是以插入的顺序被访问的。

scala> import scala.collection.mutable.LinkedHashMap
import scala.collection.mutable.LinkedHashMap

scala> val map = LinkedHashMap[String,Int]()
map: scala.collection.mutable.LinkedHashMap[String,Int] = Map()

scala> import java.util.Calendar
import java.util.Calendar

scala> map += ("Monday" -> Calendar.MONDAY)
res15: map.type = Map(Monday -> 2)

scala> map += ("Tuesday" -> Calendar.TUESDAY)
res16: map.type = Map(Monday -> 2, Tuesday -> 3)

scala> map.mkString(",")
res17: String = Monday -> 2,Tuesday -> 3

7.打印出所有Java系统实行的表格,你需要找到最长键的长度才能正确的打印出这张表格。

import scala.collection.JavaConversions.propertiesAsScalaMap

val props:scala.collection.Map[String,String] = System.getProperties()

val keys = props.keySet

val keyLengths = for( key <- keys ) yield key.length

val maxKeyLength = keyLengths.max

for(key <- keys) {
  print(key)
  print(" " * (maxKeyLength - key.length))
  print(" | ")
  println(props(key))
}

8.编写一个函数minmax(values:Array[Int]),返回数组中最小值和最大值的对偶。

def minmax(values:Array[Int])={
    (values.min,values.max)
}

9.编写一个函数lteqgt(values:Array[Int],v:Int),返回数组中小于v、等于v和大于v的数量,要求三个值一起返回。

def lteqgt(values:Array[Int],v:Int)={
    (values.count(_ < v), values.count(_ == v),values.count(_ > v))
}

10.当你将两个字符串拉链在一起,回事什么结果?相处一个讲的通的用例。

scala> "Hello".zip("World")
res19: scala.collection.immutable.IndexedSeq[(Char, Char)] = Vector((H,W), (e,o)
, (l,r), (l,l), (o,d))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
快学Scala PDF第二版》是一本非常实用的Scala编程入门指南。本书涵盖了Scala的基本概念、核心语法、函数式编程、面向对象编程、并发编程等多个方面的内容,适合初学者和有一定编程基础的读者阅读。 本书第一部分介绍了Scala的基本概念和语法,包括变量、数据类型、函数、类和对象等内容,帮助读者快速入门并掌握Scala的基础知识。第二部分介绍了Scala的函数式编程特性,包括高阶函数、匿名函数、闭包等,帮助读者理解函数式编程的思想和应用。第三部分介绍了Scala的面向对象编程特性,包括类的定义、继承、多态等,帮助读者掌握面向对象编程的基本原理和技巧。第四部分介绍了Scala的并发编程特性,包括并发基础、线程、并发集合等,帮助读者理解并发编程的概念和应用。 本书还通过大量实例和案例帮助读者加深对Scala的理解和掌握,让读者能够通过实际练习提升编程能力。此外,本书还介绍了Scala的一些高级特性和应用场景,如模式匹配、解构、隐式转换等,帮助读者更深入地学习和应用Scala编程语言。 总的来说,《快学Scala PDF第二版》是一本很不错的Scala编程入门书籍,内容丰富、通俗易懂,适合广大学习者阅读。希望读者能够通过阅读本书,快速掌握Scala编程的基础知识,并能够灵活运用到实际项目中去。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值