快学Scala习题解答—第四章 映射和元组
4 映射和元组
4.1 设置一个映射,当中包括你想要的一些装备,以及它们的价格。然后构建还有一个映射。採用同一组键,可是价格上打9折
映射的简单操作
- ,"gun"->18,"ipad"->1000)
- , gun -> 18, ipad -> 1000)
- scala> for((k,v) <- map) yield (k,v * 0.9)
- res3: scala.collection.immutable.Map[java.lang.String,Double] = Map(book -> 9.0, gun -> 16.2, ipad -> 900.0)
4.2 编写一段程序,从文件里读取单词。用一个可变映射来清点每一个单词出现的频率。读取这些单词的操作能够使用java.util.Scanner:
val in = new java.util.Scanner(new java.io.File("myfile.txt")) while(in.hasNext()) 处理 in.next() 或者翻到第9章看看更Scala的做法。
最后,打印出全部单词和它们出现的次数。
当然使用Scala的方法啦。參考第9章
首先。创建一个文件myfile.txt。输入例如以下内容
test test ttt test ttt t test sss s
Scala代码例如以下
- import scala.io.Source
- import scala.collection.mutable.HashMap
- //val source = Source.fromFile("myfile.txt")
- //val tokens = source.mkString.split("\\s+") //此写法tokens为空,不知为何
- val source = Source.fromFile("myfile.txt").mkString
- val tokens = source.split("\\s+")
- val map = new HashMap[String,Int]
- for(key <- tokens){
- ) + 1
- }
- println(map.mkString(","))
4.3 反复前一个练习,这次用不可变的映射
不可变映射与可变映射的差别就是,每次加入元素,都会返回一个新的映射
- import scala.io.Source
- val source = Source.fromFile("myfile.txt").mkString
- val tokens = source.split("\\s+")
- var map = Map[String,Int]()
- for(key <- tokens){
- ) + 1))
- }
- println(map.mkString(","))
4.4 反复前一个练习。这次使用已排序的映射。以便单词能够按顺序打印出来
和上面的代码没有什么差别,仅仅是将映射改动为SortedMap
- import scala.io.Source
- import scala.collection.SortedMap
- val source = Source.fromFile("myfile.txt").mkString
- val tokens = source.split("\\s+")
- var map = SortedMap[String,Int]()
- for(key <- tokens){
- ) + 1))
- }
- println(map.mkString(","))
4.5 反复前一个练习。这次使用java.util.TreeMap并使之适用于Scala API
主要涉及java与scala的转换类的使用
- import scala.io.Source
- import scala.collection.mutable.Map
- import scala.collection.JavaConversions.mapAsScalaMap
- import java.util.TreeMap
- val source = Source.fromFile("myfile.txt").mkString
- val tokens = source.split("\\s+")
- val map:Map[String,Int] = new TreeMap[String,Int]
- for(key <- tokens){
- ) + 1
- }
- println(map.mkString(","))
4.6 定义一个链式哈希映射,将"Monday"映射到java.util.Calendar.MONDAY,依次类推加入其它日期。展示元素是以插入的顺序被訪问的
LinkedHashMap的使用
- import scala.collection.mutable.LinkedHashMap
- import java.util.Calendar
- val map = new LinkedHashMap[String,Int]
- map += ("Monday"->Calendar.MONDAY)
- map += ("Tuesday"->Calendar.TUESDAY)
- map += ("Wednesday"->Calendar.WEDNESDAY)
- map += ("Thursday"->Calendar.THURSDAY)
- map += ("Friday"->Calendar.FRIDAY)
- map += ("Saturday"->Calendar.SATURDAY)
- map += ("Sunday"->Calendar.SUNDAY)
- println(map.mkString(","))
4.7 打印出全部Java系统属性的表格
属性转scala map的使用
- 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))
- }
4.8 编写一个函数minmax(values:Array[Int]),返回数组中最小值和最大值的对偶
- def minmax(values:Array[Int])={
- (values.max,values.min)
- }
4.9 编写一个函数Iteqgt(values:Array[int],v:Int),返回数组中小于v,等于v和大于v的数量。要求三个值一起返回
- def iteqgt(values:Array[Int],v:Int)={
- val buf = values.toBuffer
- (values.count(_ < v),values.count(_ == v),values.count(_ > v))
- }
4.10 当你将两个字符串拉链在一起,比方"Hello".zip("World"),会是什么结果?想出一个讲得通的用例
scala> "Hello".zip("World")
res0: scala.collection.immutable.IndexedSeq[(Char, Char)] = Vector((H,W), (e,o), (l,r), (l,l), (o,d))
StringOps中的zip定义例如以下
abstract def zip(that: GenIterable[B]):
StringOps[(A, B)]
GenIterable是可遍历对象须要包括的trait。对于String来说,它是可遍历的。可是它的遍历是遍历单个字母。 所以拉链就针对每一个字母来进行。
原博客地址:http://www.ivanpig.com/blog/?
p=464
快学Scala习题解答—第四章 映射和元组的更多相关文章
- 快学scala习题解答--第五章 类
5 类 5.1 改进5.1节的Counter类,让它不要在Int.MaxValue时变成负数 class Count{ private var value = Int.MaxValue else v ...
- 快学Scala习题解答—第三章 数组相关操作
3 数组相关操作 3.1 编写一段代码.将a设置为一个n个随机整数的数组,要求随机数介于0(包括)和n(不包括)之间 random和yield的使用 import scala.math.rando ...
- 快学Scala习题解答—第一章 基础
1 简介 近期对Scala比较感兴趣,买了本<快学Scala>,感觉不错.比<Programming Scala:Tackle Multi-Core Complexity on th ...
- 快学Scala习题解答—第十章 特质
10 特质 10.1 java.awt.Rectangle类有两个非常实用的方法translate和grow,但可惜的是像java.awt.geom.Ellipse2D这种类没有. 在Scala中,你 ...
- 《C++Primer》第五版习题解答--第四章【学习笔记】
[C++Primer]第五版习题解答--第四章[学习笔记] ps:答案是个人在学习过程中书写,可能存在错漏之处,仅作参考. 作者:cosefy Date: 2020/1/11 第四章:表达式 练习4. ...
- 快学Scala-第四章 映射和元组
知识点: 1.构造映射,映射是对偶的集合 val scores1 = Map("Alice" -> 10, "Bob" -> 7, "Ci ...
- 《快学Scala》第四章 映射与元组
- 快学Scala 第五课 (构造映射,获取映射值,更新映射值,迭代映射,与Java互操作)
构造映射: val score = Map[String, Int]() val score1 = HashMap[String, Int]() val value1 = Map[String, In ...
- 《快学Scala》
Robert Peng's Blog - https://mr-dai.github.io/ <快学Scala>Intro与第1章 - https://mr-dai.github.io/S ...
随机推荐
- PowerDesigner使用笔记
一:PDM模版使用 1:新建model:File——new model——选择PDM,填上名字.数据库类型 2:右侧工具类使用 3:创建表与配置 点击右侧工具栏中table控件,移动到模版面板内点击一 ...
- 排序基础之非比较的计数排序、桶排序、基数排序(Java实现)
转载请注明原文地址: http://www.cnblogs.com/ygj0930/p/6639353.html 比较和非比较排序 快速排序.归并排序.堆排序.冒泡排序等比较排序,每个数都必须和其他 ...
- Leetcode 240 Search a 2D Matrix II (二分法和分治法解决有序二维数组查找)
1.问题描写叙述 写一个高效的算法.从一个m×n的整数矩阵中查找出给定的值,矩阵具有例如以下特点: 每一行从左到右递增. 每一列从上到下递增. 2. 方法与思路 2.1 二分查找法 依据矩阵的特征非常 ...
- python之函数用法isupper()
# -*- coding: utf-8 -*- #python 27 #xiaodeng #python之函数用法isupper() #http://www.runoob.com/python/att ...
- Android context空指针异常
Fragment中的代码 context 是null public class PlaceholderFragment extends Fragment{ Context context = getA ...
- Light OJ 1406 Assassin`s Creed 状态压缩DP+强连通缩点+最小路径覆盖
题目来源:Light OJ 1406 Assassin`s Creed 题意:有向图 派出最少的人经过全部的城市 而且每一个人不能走别人走过的地方 思路:最少的的人能够走全然图 明显是最小路径覆盖问题 ...
- 轻量级桌面 openbox + tint2 + conky + stalonetray + pcmanfm + xcompmgr
openbox+tint2+pnmixer+conky=轻量级archlinux桌面环境设置备忘 缘起 机器上的Ubuntu 12.04有一段时间没有使用了,最近在用的时候发现频繁死机的情况,开始以为 ...
- (org.jbehave.core.failures.BeforeOrAfterFailed: webdriver selenium错误解决。
(org.jbehave.core.failures.BeforeOrAfterFailed: Method initWebDriver (annotated with @BeforeStory in ...
- 搭建简单的网络部分(OC)框架
准备工作 1.文件目录结构示图(按照MVC分层) 文件目录结构图/自定义Cell Controller: CYXOneViewController Model: CYXMenu View: CYXCe ...
- 命令行参数解析函数getopt和getopt_long函数【转】
原文地址:http://blog.csdn.net/cashey1991/article/details/7942809 getopt和getopt_long函数 平时在写程序时常常需要对命令行参 ...