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. vue2.0 技巧汇总

    /** * Created by */ export default { trim: (str) => { //删除左右两端的空格 return str.replace(/(^\s*)|(\s* ...

  2. ubuntu Ros环境halcon的一个程序

    这个首先并不是我一边做实验一遍记录的,而是我做完成以后才想起来做个分享的,所以中途遇到的很多问题,并没有来得及记录下来,现在写的这些都是后话了 首先呢!我们不需要在ROS下写halcon的程序也是可以 ...

  3. 使用python脚本实现iOS图片资源压缩

    最近公司有一个新的需求,要把代码进行瘦身,这篇博客记录下如何对图片进行压缩的. 原理: 写一个脚本,把图片文件夹'.xcassets'的所有文件遍历出来,然后使用一个第三方的算法把图片压缩后再替换回去 ...

  4. MyBatis ResultMap Assocation 返回属性为null的问题

    Model: public class Employee { private Integer id; private String lastName; private String email; pr ...

  5. Springboot多数据源配置--数据源动态切换

    在上一篇我们介绍了多数据源,但是我们会发现在实际中我们很少直接获取数据源对象进行操作,我们常用的是jdbcTemplate或者是jpa进行操作数据库.那么这一节我们将要介绍怎么进行多数据源动态切换.添 ...

  6. Qt中关于QMouseEventbuttons()和QMouseEventbutton()的使用注意

    在进行QT程序开发中经常需要响应鼠标事件,在QWidget或QMainWindow的子类中可以重载如下鼠标事件实现自己需要的效果. virtual void mouseDoubleClickEvent ...

  7. OSG相关扩展工程

    https://blog.csdn.net/wang15061955806/article/details/51003803 OSG的相关扩展,OSG针对每个特定应用,也有很多的开发者进行开发和完善, ...

  8. 【转】Android 为什么 dp2px 或 px2dp 公式需要加 0.5f

    转自:http://blog.csdn.net/changcsw/article/details/52440543 网上 dp2px 和 px2dp 公式: public static int px2 ...

  9. Redis 主从配置(Windows版)

    安装从库 1.复制一份 Redis 文件,当做从库. 2.修改从库文件中 redis.windows.conf 的端口号. 3.安装服务,需要重新设置名称.然后去服务中,开启“redis6380”(此 ...

  10. 关于vmware 11.1安装windows 7操作系统时报错 Unist specified don’t exist. SHSUCDX can’t install

    笔者今天在vmware 11.1 虚拟机下使用光驱安装windows 7 32位操作系统时,报错: Unist specified don’t exist. SHSUCDX can’t install ...