《快学scala第二版》第四章 练习答案

2023-11-01 06:48

本文主要是介绍《快学scala第二版》第四章 练习答案,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

4.1 设置一个映射,其中包含你想要的一些装备,以及它们的价格。然后构建另一个映射,采用同一组键,但是价格上打9折

    var equiments = Map("shoes" -> 200, "pants" -> 80)var newMap = for((k,v) <- equiments) yield (k, 0.9 * v)println(newMap)

4.2 编写一段程序,从文件中读取单词。用一个可变映射来清点每个单词出现的频率。读取这些单词的操作可以使用java.util.Scanner:
val in = new java.util.Scanner(new java.io.File(“myfile.txt”)) while(in.hasNext()) 处理 in.next() 或者翻到第9章看看更Scala的做法。 最后,打印出所有单词和它们出现的次数。

文件hello.txt如下:
在这里插入图片描述

  def main(args: Array[String]): Unit = {var file = scala.io.Source.fromFile("hello.txt","UTF-8")var words = file.mkString.split("\\s+")var map = scala.collection.mutable.Map[String,Int]()for( word <- words){map(word) = (map.getOrElse(word, 0) + 1)}println(map)}

4.3 重复前一个练习,这次用不可变的映射

  def main(args: Array[String]): Unit = {val in = new Scanner(new File("hello.txt"))var map = Map[String,Int]()while (in.hasNext()) {var str = in.next()map += (str -> (map.getOrElse(str, 0) + 1))}println(map)}

上面的Map其实就是scala.collection.immutable.Map,即不可变的映射。
不可变映射与可变映射的区别就是,每次添加元素,都会返回一个新的映射
这里我们再改用第9章的方式:

  def main(args: Array[String]): Unit = {var file = scala.io.Source.fromFile("hello.txt","UTF-8")var words = file.mkString.split("\\s+")var map = scala.collection.immutable.Map[String,Int]()for( word <- words){map += (word -> (map.getOrElse(word, 0) + 1))}println(map)}

4.4 重复前一个练习,这次使用已排序的映射,以便单词可以按顺序打印出来
和上面的代码没有什么区别,只是将映射修改为SortedMap

  def main(args: Array[String]): Unit = {var file = scala.io.Source.fromFile("hello.txt","UTF-8")var words = file.mkString.split("\\s+")var map = scala.collection.mutable.SortedMap[String,Int]()for( word <- words){map(word) = (map.getOrElse(word, 0) + 1)}println(map)}

4.5 重复前一个练习,这次使用java.util.TreeMap并使之适用于Scala API
原本想按书上的操作,but:

@deprecated("Use `asScala` instead", "2.13.0")def mapAsScalaMap[A, B](m: ju.Map[A, B]): mutable.Map[A, B] = asScala(m)

我用的是2.13版本~经过一番研究:

    var file = scala.io.Source.fromFile("hello.txt","UTF-8")var words = file.mkString.split("\\s+")import scala.jdk.CollectionConverters._var source = new java.util.TreeMap[String,Int]()var map = source.asScalafor( word <- words){map(word) = (map.getOrElse(word, 0) + 1)}println(map)

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

var map = scala.collection.mutable.LinkedHashMap[String,Int]()map += ("Monday" -> Calendar.MONDAY)map += ("Tuesday" -> Calendar.TUESDAY)map += ("Wednesday" -> Calendar.WEDNESDAY)println(map)

4.7 打印出所有Java系统属性的表格 ,类似于下面这样:
在这里插入图片描述


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

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

4.9 编写一个函数Iteqgt(values:Array[Int],v:Int),返回数组中小于v,等于v和大于v的数量,要求三个值一起返回
Scala代码

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

4.10 当你将两个字符串拉链在一起,比如"Hello".zip(“World”),会是什么结果?想出一个讲得通的用例

zip的doc如下:

 /** Returns a $coll formed from this $coll and another iterable collection*  by combining corresponding elements in pairs.*  If one of the two collections is longer than the other, its remaining elements are ignored.**  @param   that  The iterable providing the second half of each result pair*  @tparam  B     the type of the second half of the returned pairs*  @return        a new $coll containing pairs consisting of corresponding elements of this $coll and `that`.*                 The length of the returned collection is the minimum of the lengths of this $coll and `that`.*/def zip[B](that: IterableOnce[B]): CC[(A @uncheckedVariance, B)] = iterableFactory.from(that match { // sound bcs of VarianceNotecase that: Iterable[B] => new View.Zip(this, that)case _ => iterator.zip(that)})

我们可以很清楚的看到和iterable相关,String可以看成是字符数组,也就是可迭代的~那么zip就是针对每个字符。

这篇关于《快学scala第二版》第四章 练习答案的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/321215

相关文章

闲置电脑也能活出第二春?鲁大师AiNAS让你动动手指就能轻松部署

对于大多数人而言,在这个“数据爆炸”的时代或多或少都遇到过存储告急的情况,这使得“存储焦虑”不再是个别现象,而将会是随着软件的不断臃肿而越来越普遍的情况。从不少手机厂商都开始将存储上限提升至1TB可以见得,我们似乎正处在互联网信息飞速增长的阶段,对于存储的需求也将会不断扩大。对于苹果用户而言,这一问题愈发严峻,毕竟512GB和1TB版本的iPhone可不是人人都消费得起的,因此成熟的外置存储方案开

poj 3104 二分答案

题意: n件湿度为num的衣服,每秒钟自己可以蒸发掉1个湿度。 然而如果使用了暖炉,每秒可以烧掉k个湿度,但不计算蒸发了。 现在问这么多的衣服,怎么烧事件最短。 解析: 二分答案咯。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <c

RabbitMQ练习(AMQP 0-9-1 Overview)

1、What is AMQP 0-9-1 AMQP 0-9-1(高级消息队列协议)是一种网络协议,它允许遵从该协议的客户端(Publisher或者Consumer)应用程序与遵从该协议的消息中间件代理(Broker,如RabbitMQ)进行通信。 AMQP 0-9-1模型的核心概念包括消息发布者(producers/publisher)、消息(messages)、交换机(exchanges)、

《数据结构(C语言版)第二版》第八章-排序(8.3-交换排序、8.4-选择排序)

8.3 交换排序 8.3.1 冒泡排序 【算法特点】 (1) 稳定排序。 (2) 可用于链式存储结构。 (3) 移动记录次数较多,算法平均时间性能比直接插入排序差。当初始记录无序,n较大时, 此算法不宜采用。 #include <stdio.h>#include <stdlib.h>#define MAXSIZE 26typedef int KeyType;typedef char In

CSP 2023 提高级第一轮 CSP-S 2023初试题 完善程序第二题解析 未完

一、题目阅读 (最大值之和)给定整数序列 a0,⋯,an−1,求该序列所有非空连续子序列的最大值之和。上述参数满足 1≤n≤105 和 1≤ai≤108。 一个序列的非空连续子序列可以用两个下标 ll 和 rr(其中0≤l≤r<n0≤l≤r<n)表示,对应的序列为 al,al+1,⋯,ar​。两个非空连续子序列不同,当且仅当下标不同。 例如,当原序列为 [1,2,1,2] 时,要计算子序列 [

【Rust练习】12.枚举

练习题来自:https://practice-zh.course.rs/compound-types/enum.html 1 // 修复错误enum Number {Zero,One,Two,}enum Number1 {Zero = 0,One,Two,}// C语言风格的枚举定义enum Number2 {Zero = 0.0,One = 1.0,Two = 2.0,}fn m

MySql 事务练习

事务(transaction) -- 事务 transaction-- 事务是一组操作的集合,是一个不可分割的工作单位,事务会将所有的操作作为一个整体一起向系统提交或撤销请求-- 事务的操作要么同时成功,要么同时失败-- MySql的事务默认是自动提交的,当执行一个DML语句,MySql会立即自动隐式提交事务-- 常见案例:银行转账-- 逻辑:A给B转账1000:1.查询

html css jquery选项卡 代码练习小项目

在学习 html 和 css jquery 结合使用的时候 做好是能尝试做一些简单的小功能,来提高自己的 逻辑能力,熟悉代码的编写语法 下面分享一段代码 使用html css jquery选项卡 代码练习 <div class="box"><dl class="tab"><dd class="active">手机</dd><dd>家电</dd><dd>服装</dd><dd>数码</dd><dd

java线程深度解析(一)——java new 接口?匿名内部类给你答案

http://blog.csdn.net/daybreak1209/article/details/51305477 一、内部类 1、内部类初识 一般,一个类里主要包含类的方法和属性,但在Java中还提出在类中继续定义类(内部类)的概念。 内部类的定义:类的内部定义类 先来看一个实例 [html]  view plain copy pu

【附答案】C/C++ 最常见50道面试题

文章目录 面试题 1:深入探讨变量的声明与定义的区别面试题 2:编写比较“零值”的`if`语句面试题 3:深入理解`sizeof`与`strlen`的差异面试题 4:解析C与C++中`static`关键字的不同用途面试题 5:比较C语言的`malloc`与C++的`new`面试题 6:实现一个“标准”的`MIN`宏面试题 7:指针是否可以是`volatile`面试题 8:探讨`a`和`&a`