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

import scala.collection.JavaConversions.asScalaBuffer
import scala.collection.mutable.Buffer
import java.awt.datatransfer._
 
import java.util.TimeZone
object App{
  def main(args: Array[String]){
    val = Map("Mac Mini" -> 4988"MacBook Air" -> 6288"MacBook Pro" -> 8488)
    println(a.mkString("[",", ","]"))
    println("10% OFF")
    val = for( (k,v) <- a ) yield (k, v * 0.9
    println(b.mkString("[",", ","]"))
     
  }
}
/*result
[Mac Mini -> 4988, MacBook Air -> 6288, MacBook Pro -> 8488]
10% OFF
[Mac Mini -> 4489.2, MacBook Air -> 5659.2, MacBook Pro -> 7639.2]
*/

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

3. 重复前一个练习,这次用不可变的映射。
object App{
  def main(args: Array[String]){
    val map = countWord("myfile.txt")
    println(map.mkString("["", ""]"))
     
     
  }
  def countWord(filename:String)={
    var words = Map[String, Int]()
     
    val in = new java.util.Scanner(new java.io.File("myfile.txt"))
    while(in.hasNext()){
        var key = in.next()
        words += (key -> (words.getOrElse(key,0) + 1))
    }
    words
  }
   
}
/*result
 
*/

4. 重复前一个练习,这次用已排序的映射,以便单词可以按顺序打印出来。
object App{
  def main(args: Array[String]){
    val map = countWord("myfile.txt")
    println(map.mkString("["", ""]"))
     
     
  }
  def countWord(filename:String)={
    var words = scala.collection.immutable.SortedMap[String, Int]()
     
    val in = new java.util.Scanner(new java.io.File("myfile.txt"))
    while(in.hasNext()){
        var key = in.next()
        words += (key -> (words.getOrElse(key,0) + 1))
    }
    words
  }
   
}
/*result
 
*/

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

import scala.collection.JavaConversions.mapAsScalaMap
object App{
  def main(args: Array[String]){
    val map = countWord("myfile.txt")
    println(map.mkString("["", ""]"))
     
     
  }
  def countWord(filename:String)={
    var words = new java.util.TreeMap[String, Int]()
     
    val in = new java.util.Scanner(new java.io.File("myfile.txt"))
    while(in.hasNext()){
        var key = in.next()
        words += (key -> (words.getOrElse(key,0) + 1))
    }
    words
  }
   
}
/*result
*/

6. 定义一个链式哈希映射,将"Monday"映射到java.util.Calendar.MONDAY,以此类推加入其他日期。
展示元素是以插入的顺序被访问的。
import scala.collection.JavaConversions.mapAsScalaMap
 
object App{
  def main(args: Array[String]){
    val map = weekday("myfile.txt")
    println(map.mkString("["", ""]"))
     
  }
  def weekday(filename:String)={
    var weekdays = new java.util.LinkedHashMap[String,Int]()
    weekdays("Monday"= java.util.Calendar.MONDAY
    weekdays("Tuesday"= java.util.Calendar.TUESDAY
    weekdays("Wednesday"= java.util.Calendar.WEDNESDAY
    weekdays("Thursday"= java.util.Calendar.THURSDAY
    weekdays("Friday"= java.util.Calendar.FRIDAY
    weekdays("Saturday"= java.util.Calendar.SATURDAY
    weekdays("Sunday"= java.util.Calendar.SUNDAY
    weekdays
  }
   
}
/*result
[Monday -> 2, Tuesday -> 3, Wednesday -> 4, Thursday -> 5, Friday -> 6, Saturday -> 7, Sunday -> 1]
*/

7.  打印出所有Java系统属性的表格,类似这样:
java.runtime.name    |  Java(TM) SE Runtime Environment
...
你需要找到最长键的长度才能正确地打印出这张表格。
import scala.collection.JavaConversions.propertiesAsScalaMap
 
object App{
  def main(args: Array[String]){
    printSystemProperties()
  }
  def printSystemProperties()={
    val props: scala.collection.Map[String, String] = System.getProperties()
    var maxlen = 0
    for((k,_) <- props) if(maxlen < k.length) maxlen = k.length
    maxlen += 1
     
    for((k,v) <- props){
        printf("%-" + maxlen.toString + "s | %s\n", k, v)
    }
  }
}
/*result
java.vm.specification.version  | 1.8
sun.java.command               | scala.tools.nsc.MainGenericRunner e4-7.scala
java.home                      | H:\ProgramFiles\Java\jdk1.8.0_25\jre
...
*/

8.  编写一个函数minmax(values: Array[Int]),返回数组中最小值和最大值的对偶。
object App{
  def main(args: Array[String]){
    val = Array(1,2,3,4,5,6,7)
    val = minmax(a)
    println(a.mkString("[",", ","]"))
    println(b)
  }
  def minmax(values: Array[Int])={
    (values.min,values.max)
  }
}
/*result
[1, 2, 3, 4, 5, 6, 7]
(1,7)
*/

9. 编写一个函数lteqgt(values: Array[Int], v: Int),返回数组中小于v、等于v和大于v的数量,要求三个值一起返回。
object App{
  def main(args: Array[String]){
    val = Array(1,2,3,4,5,6,7)
    val = lteqgt(a, 4)
    println(a.mkString("[",", ","]"))
    println(b)
  }
  def lteqgt(values: Array[Int], v: Int)={
    val lt = values.count(_ < v)
    val eq = values.count(_ == v)
    val gt = values.count(_ > v)
     
    (lt, eq, gt)
  }
}
/*result
[1, 2, 3, 4, 5, 6, 7]
(3,1,3)
*/

10. 当你将两个字符串拉链在一起,比如"Hello".zip("World"),会是什么结果?想出一个讲得通的用例。
object App{
  def main(args: Array[String]){
    val = zip("Hello""World")
    println(a)
    //println(a.mkString("[",", ","]"))
  }
  def zip(s1:String, s2:String)={
    val = s1.zip(s2)
     
    a
  }
}
/*result
Vector((H,W), (e,o), (l,r), (l,l), (o,d))
*/



Ch04 映射和元组 - 练习的更多相关文章

  1. 快学Scala-第四章 映射和元组

    知识点: 1.构造映射,映射是对偶的集合 val scores1 = Map("Alice" -> 10, "Bob" -> 7, "Ci ...

  2. Scala学习(四)---映射和元组

    映射和元组 摘要: 一个经典的程序员名言是:"如果只能有一种数据结构,那就用哈希表吧".哈希表或者更笼统地说映射,是最灵活多变的数据结构之一.映射是键/值对偶的集合.Scala有一个通用的叫法:元组, ...

  3. 快学Scala习题解答—第四章 映射和元组

    4 映射和元组  4.1 设置一个映射,当中包括你想要的一些装备,以及它们的价格.然后构建还有一个映射.採用同一组键,可是价格上打9折 映射的简单操作  ,"gun"->18 ...

  4. 【scala】 scala 映射和元组操作(四)

    1.映射  Map 定义 ,取值,遍历,排序 2. 元组 定义,取值,拉链操作 import scala.collection.mutable /** * 映射和元组 * * @author xwol ...

  5. Scala的映射和元组操作

    映射和元组操作 构造Map // 构造一个不可变的MAP映射,类似与key -> value这样的组合叫做对偶 val score = Map("Jack" -> 12 ...

  6. Scala从入门到放弃(三)Scala的数组、映射、元组和集合

    1.数组 1.1定长数组和变长数组 object ArrayDemo { def main(args: Array[String]): Unit = { //初始化一个长度为8的定长数组,其数组元素均 ...

  7. 学好Spark/Kafka必须要掌握的Scala技术点(一)变量、表达式、循环、Option、方法和函数,数组、映射、元组、集合

    前言 Scala是以JVM为运行环境的面向对象的函数式编程语言,它可以直接访问Java类库并且与Java框架进行交互操作.正如之前所介绍,Spark是用Scala语言编写的,Kafka server端 ...

  8. Scala:映射和元组

    映射是键值对偶的集合.Scala有一个通用的叫法——元组:n个对象的聚集,并不一定要相同的类型. 构造映射 键A -> 值B scala> val scores = Map()//不可变映 ...

  9. 《快学Scala》——数组、映射和元组

    数组 定长数组:在Scala中可以用Array,初始化一个定长数组.例如: val nums = new Array[Int](10) //10个整数的数组,所有元素初始化为0 val a = new ...

随机推荐

  1. Linux常用指令笔记

    目标:统计当前目录下java文件的个数 指令:`ls -R ./ | grep .java$ | wc -l` 原理:`ls -R ./`列出当前文件夹下的所有FILE,包括目录以及文件;`grep ...

  2. HttpWebRequest 基础连接已经关闭: 未能为 SSL/TLS 安全通道建立信任关系

    请求对象前加入 ServicePointManager.ServerCertificateValidationCallback = ValidateServerCertificate; 然后实现该方法 ...

  3. Spring Boot 调用 MongoRepository时报org.springframework.beans.factory.NoSuchBeanDefinitionException错误的解决办法

    这个问题整整折腾了我两天,现在记录下来,希望可以帮助和我一样,遇到相同问题的小伙伴. 项目是分层的(Intellij IDEA中的模块Module),有API(Core)层,Service&D ...

  4. node踩坑之This is probably not a problem with npm. There is likely additional logging output above.错误

    可能由于种种版本更新的原因需要执行 npm install重新安装一次,如果还是不可以的话,在把之前装的都清空 rm -rf node_modulesrm package-lock.jsonnpm c ...

  5. Android 8 蓝牙 扫描流程

    记录android 8 蓝牙扫描设备的流程 src/com/android/settings/bluetooth/BluetoothSettings.java @Override protected ...

  6. Maven私服(Repository Manager) - Nexus安装和使用(详细过程)

    Maven私服的安装和使用. (注:原创文章,引用请注明来自Clement-Xu的博客!) Maven私服(即Repository Manager)的主要作用: 减少从远方仓库下载的次数,节省带宽.提 ...

  7. Flask 学习笔记(1)--环境安装

    Flask 官网:http://flask.pocoo.org/ Flask文档:http://docs.jinkan.org/docs/flask/ 0x01 安装方式 安装步骤很简单,就是这个样子 ...

  8. JS的eval函数解密反混淆

    https://www.hhtjim.com/js-decryption-de-obfuscate-eval-function.html JS的eval函数解密反混淆

  9. python @staticmethod和@classmethod的作用

    一般来说,要使用某个类的方法,需要先实例化一个对象再调用方法. 而使用@staticmethod或@classmethod,就可以不需要实例化,直接类名.方法名()来调用. 这有利于组织代码,把某些应 ...

  10. Linux awk sort

    2018-05-31 15:56:38|25961|Cmd_Hero_GetFreeHeros_CS|2|481|0|14|222018-05-31 15:56:38|25961|Cmd_Role_G ...