映射和元组&练习

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. 国网SGCC_UAP 反编译.class文件源代码

    SGCC_UAP和eclipse操作方式差不多,对于用惯了IDEA和Android Studio的人来说非常不方便,按住Ctrl点击类名不能查看源码. 因为jar包下都是.class文件,所以需要安装 ...

  2. Vue CLI3 开启gzip压缩

    gizp压缩是一种http请求优化方式,通过减少文件体积来提高加载速度.html.js.css文件甚至json数据都可以用它压缩,可以减小60%以上的体积. webpack在打包时可以借助 compr ...

  3. Kotlin入门(17)等式判断的情况

    话说等式可是编程语言最基本的表达式之一,不管哪种高级语言,无一例外都采用双等号“==”判断两个变量是否相等:就算是复杂的对象,在Java中也可通过equals函数判断两个实例是否相等.按理说这些能够满 ...

  4. Android清单文件合并的那些事

    APK文件只能包含一个AndroidManifest.xml文件,但Android Studio项目可以包含多个文件(通过buildSrc.导入的库引入).因此,在构建应用时,Gradle构建会将所有 ...

  5. LeetCode题解之Second Minimum Node In a Binary Tree

    1.题目描述 2.问题分析 使用set. 3.代码 set<int> s; int findSecondMinimumValue(TreeNode* root) { dfs(root); ...

  6. 洗礼灵魂,修炼python(11)--python函数,模块

    前面的章节你如果看懂了,基本算是入门了七八了,不过如果你以为python就这么点东西,你觉得很简单啊,那你就错了,真正的东西在后面,前面我说的几大核心其实也不是多么高深多么厉害的,那些东西是基础很常用 ...

  7. python第一百零五天 ---Django 基础 路由系统 URL 模板语言 ORM 操作

    一 路由系统 URL 1 url(r'^index/',views.index) url(r'^home/', views.Home.as_view()) 2 url(r'^detail-(\d+). ...

  8. windows7系统最大支持多少内存

      目前Windows 7 64位版仅能使用最大为192GB内存. 这是各个版本的具体数据:64位的Windows  7家庭普通版最高可支持8GB内存,家庭高级版最高可支持16GB内存,64位的Win ...

  9. Java设计模式之二 ----- 工厂模式

    在上一篇中我们学习了单例模式,介绍了单例模式创建的几种方法以及最优的方法.本篇则介绍设计模式中的工厂模式,主要分为简单工厂模式.工厂方法和抽象工厂模式. 简单工厂模式 简单工厂模式是属于创建型模式,又 ...

  10. Java的自动装箱和拆箱

    一.什么是装箱?什么是拆箱? 在前面的文章中提到,Java为每种基本数据类型都提供了对应的包装器类型,至于为什么会为每种基本数据类型提供包装器类型在此不进行阐述,有兴趣的朋友可以查阅相关资料.在Jav ...