映射和元组&练习

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

映射代码如下:

object HelloScala{

  def main(args: Array[String]): Unit = {

    val map=Map("Computer"->3000,"Iphone"->2000,"Cup"->10)

    val fold=for((k,v)<-map) yield (k,v*0.9)

    fold.foreach(println)

  }

}

运行结果:

(Computer,2700.0)

(Iphone,1800.0)

(Cup,9.0)

2.  编写一段程序,从文件中读取单词。用一个可变映射来清点每一个单词出现的频率。读取这些单词的操作可以使用java.utiI.Scanner:

val in=new java.util.Scanner(new java.io.File("myfile.txt"))

while  (in.hasNext()) 处理in .next()

最后,打印出所有单词和它们出现的次数

首先,新建一个file文件,文件名为:file,文件内容如下:

Hello    Hello

World    Hello    Scala

单词统计代码如下:

object HelloScala{

  def main(args: Array[String]): Unit= {

    val in=new Scanner(new File("src/file"))

    val maps=new HashMap [String,Int]

    var key:String=null

    while(in.hasNext()){

      key=in.next()

    }  

    maps.foreach(println);

  }

}

运行结果如下:

(Hello,3)

(Scala,1)

(World,1)

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

不可变映射代码如下:

object HelloScala{

  def main(args: Array[String]): Unit= {

    val in=new Scanner(new File("src/file"))

行会报错

    var key:String=null

    while(in.hasNext()){

      key=in.next()

      maps+=(key->(maps.getOrElse(key, 0)+1))

    }

    maps.foreach(println)

  }

}

运行结果:

(Hello,3)

(Scala,1)

(World,1)

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

使用SortedMap映射代码如下:

object HelloScala{

  def main(args: Array[String]): Unit= {

    val in=new Scanner(new File("src/file"))

    var sortMap=SortedMap[String,Int]()

    var key:String=null

    while(in.hasNext()){

      key=in.next()

      sortMap+=(key->(sortMap.getOrElse(key, 0)+1))

    }

    sortMap.foreach(println)

  }

}

运行结果:

(Hello,3)

(Scala,1)

(World,1)

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

程序代码如下:

object HelloScala{

  def main(args: Array[String]): Unit= {

    val in=new Scanner(new File("src/file"))

    val map:Map[String,Int]=new TreeMap[String,Int]

    var key:String=null

    while(in.hasNext()){

      key=in.next()

    }

    map.foreach(println)

  }

}

运行结果如下:

(Hello,3)

(Scala,1)

(World,1)

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

链式哈希映射基本使用;

object HelloScala{

  def main(args: Array[String]): Unit= {

    val map=new LinkedHashMap[String,Int]

    map+=("Monday"->Calendar.MONDAY)

    map+=("Tuesday"->Calendar.TUESDAY)

    map+=("Thursday"->Calendar.THURSDAY)

    map+=("Wednesday"->Calendar.WEDNESDAY)

    map+=("Friday"->Calendar.FRIDAY)

    map+=("Saturday"->Calendar.SATURDAY)

    map+=("Sunday"->Calendar.SUNDAY)

    map.foreach(println)

  }

}

运行结果:

(Monday,2)

(Tuesday,3)

(Thursday,5)

(Wednesday,4)

(Friday,6)

(Saturday,7)

(Sunday,1)

7. 打印出所有Java系统属性的表格,类似这样:

  java.runtime.name                     | Java (TM)  SE Runtime Environment

sun.boot.library.path                      | /home/apps/jdk1.6.0_21/jre/lib/i386

java.vm.version                         |17.0-b16

java.vm.vendor                          | Sun Microsystems Inc.

java.vendor.url                          | http://java.sun*com/

path.separator                         |:

java.vm.name                          |  Java HotSpot (TM)  Server VM

你需要找到最长键的长度才能正确地打印出这张表格

属性转ScalaMap:

object HelloScala{

  def main(args: Array[String]): Unit= {

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

   val keys=props.keySet

   val keylens=for(i<-keys) yield i.length()

   val keymaxlen=keylens.max

   for(key <- keys){

     print(key)

     print(" "*(keymaxlen-key.length()))

     print("|")

     println(props(key))

   }

  }

}

运行结果:

java.runtime.name            |Java(TM) SE Runtime Environment

sun.boot.library.path            |F:\Tools\DevelopTool\Jre1.7\bin

java.vm.version              |24.72-b04

java.vm.vendor              |Oracle Corporation

java.vendor.url              |http://java.oracle.com/

path.separator              |;

java.vm.name                |Java HotSpot(TM) Client VM

file.encoding.pkg             |sun.io

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

程序代码如下:

object HelloScala{

  def main(args: Array[String]): Unit= {

    val array=Array(1,2,3,4,5)

    var tuple:(Int,Int)=minmax(array)

    println(tuple._1+" "+tuple._2)

  }

  def minmax(arr:Array[Int])={

    (arr.min,arr.max)

  }

}

运行结果:

1 5

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

程序代码如下:

object HelloScala{

  def main(args: Array[String]): Unit= {

    val array=Array(1,1,2,2,3,3,4,5,6)

    val tuple:(Int,Int,Int)=iteqgt(array,3)

的数量:"+tuple._1)

的数量:"+tuple._2)

的数量:"+tuple._3)

  }

  def iteqgt(arr:Array[Int],v:Int)={

    val buf=arr.toBuffer

    (buf.count(_ < v),buf.count(_ == v),buf.count(_ >= v))

  }

}

运行结果:

的数量:4

的数量:2

的数量:5

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

程序代码:

object HelloScala{

  def main(args: Array[String]): Unit= {

    val tuple="Hello".zip("World")

    tuple.toMap

    tuple.foreach(println)

  }

}

运行结果:

(H,W)

(e,o)

(l,r)

(l,l)

(o,d)

在Scaladoc的StringOps中的zip方法定义如下:

def zip[B] (that: GenIterable[B]) : String[(A, B)]

GenIterable是可遍历对象需要包含的trait,对于String来说,它是可遍历的。但是它的遍历是遍历单个字母。 所以拉链就针对每个字母来进行

如果,您认为阅读这篇博客让您有些收获,不妨点击一下右下角的【推荐】。
如果,您希望更容易地发现我的新博客,不妨点击一下左下角的【关注我】。
如果,您对我的博客所讲述的内容有兴趣,请继续关注我的后续博客,我是【Sunddenly】。

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

Scala学习(四)练习的更多相关文章

  1. Scala学习四——映射和数组

    一.本章要点 Scala有十分易用的语言来创建,查询和遍历映射 你需要从可变和不可变的映射中做出选择 默认情况下,你得到的是一个哈希映射,不过你也可以指明要树形映射 你可以很容易地在Scala映射和J ...

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

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

  3. 【Todo】【读书笔记】大数据Spark企业级实战版 & Scala学习

    下了这本<大数据Spark企业级实战版>, 另外还有一本<Spark大数据处理:技术.应用与性能优化(全)> 先看前一篇. 根据书里的前言里面,对于阅读顺序的建议.先看最后的S ...

  4. 基于.net的分布式系统限流组件 C# DataGridView绑定List对象时,利用BindingList来实现增删查改 .net中ThreadPool与Task的认识总结 C# 排序技术研究与对比 基于.net的通用内存缓存模型组件 Scala学习笔记:重要语法特性

    基于.net的分布式系统限流组件   在互联网应用中,流量洪峰是常有的事情.在应对流量洪峰时,通用的处理模式一般有排队.限流,这样可以非常直接有效的保护系统,防止系统被打爆.另外,通过限流技术手段,可 ...

  5. Scala学习资源

    Scala学习资源: Scala官方网站:http://www.scala-lang.org/ Scala github:https://github.com/scala/scala Twitter ...

  6. TweenMax动画库学习(四)

    目录            TweenMax动画库学习(一)            TweenMax动画库学习(二)            TweenMax动画库学习(三)            Tw ...

  7. 机器学习(三)--- scala学习笔记

    Scala是一门多范式的编程语言,一种类似Java的编程语言,设计初衷是实现可伸缩的语言.并集成面向对象编程和函数式编程的各种特性. Spark是UC Berkeley AMP lab所开源的类Had ...

  8. SVG 学习<四> 基础API

    目录 SVG 学习<一>基础图形及线段 SVG 学习<二>进阶 SVG世界,视野,视窗 stroke属性 svg分组 SVG 学习<三>渐变 SVG 学习<四 ...

  9. 【Scala】Scala学习资料

    Scala学习资料 java 树形 分类器_百度搜索 决策树分类器-Java实现 - CSDN博客 KNN分类器-Java实现 - CSDN博客 学习:java设计模式—分类 - 飞翔荷兰人 - 博客 ...

随机推荐

  1. springcloud 入门 7 (zuul路由网关)

    Zuul简介: Zuul的主要功能是路由转发和过滤器.路由功能是微服务的一部分,比如/api/user转发到到user服务,/api/shop转发到到shop服务.zuul默认和Ribbon结合实现了 ...

  2. python最全学习资料:python基础进阶+人工智能+机器学习+神经网络(包括黑马程序员2017年12月python视频(百度云链接))

    首先用数据说话,看看资料大小,达到675G 承诺:真实资料.不加密,获取资料请加QQ:122317653 包含内容:1.python基础+进阶+应用项目实战 2.神经网络算法+python应用 3.人 ...

  3. 6.1Python文件的操作(一)

    目录 目录 前言 (一)基础类型 ==1.只读== ==2.只写== ==3.追加== (二)b二进制组合 ==1.读写二进制文件== (三)+ 附加组合 ==1.读附加== ==2.写附加== == ...

  4. February 5th, 2018 Week 6th Monday

    The world is what it is; men who are nothing, who allow themselves to become nothing, have no place ...

  5. February 3rd, 2018 Week 5th Saturday

    Life takes on the meaning that you give it. 你赋予生活什么,生活就是什么样子. I always wonder why on earth I am here ...

  6. 软工实践作业2:个人项目实战之Sudoku

    Github:Sudoku 项目相关要求 项目需求 利用程序随机构造出N个已解答的数独棋盘 . 输入 数独棋盘题目个数N(0<N<=1000000). 输出 随机生成N个不重复的已解答完毕 ...

  7. Alpha版本 - 测试报告

    Alpha版本 - 测试报告 总体测试计划 前端 模块 子模块 测试项 预期结果 测试工具 执行人 登录/注册模块 无网络 提示无网异常 robolectric 陈龙江 登录 输入用户名/密码为空,点 ...

  8. i.s.h.med Enhancement for cancelling an appointment

    This article intends to introduce my experience about enhancement for canceling an appointment. I tr ...

  9. ScheduledThreadPoolExecutor源码解读

    1. 背景 在之前的博文--ThreadPoolExecutor源码解读已经对ThreadPoolExecutor的实现原理与源码进行了分析.ScheduledExecutorService也是我们在 ...

  10. Java客户端连接kafka集群报错

    往kafka集群发送消息时,报错如下: page_visits-1: 30005 ms has passed since batch creation plus linger time 加入log4j ...