Scala学习(四)练习
映射和元组&练习 |
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学习(四)练习的更多相关文章
- Scala学习四——映射和数组
一.本章要点 Scala有十分易用的语言来创建,查询和遍历映射 你需要从可变和不可变的映射中做出选择 默认情况下,你得到的是一个哈希映射,不过你也可以指明要树形映射 你可以很容易地在Scala映射和J ...
- Scala学习(四)---映射和元组
映射和元组 摘要: 一个经典的程序员名言是:"如果只能有一种数据结构,那就用哈希表吧".哈希表或者更笼统地说映射,是最灵活多变的数据结构之一.映射是键/值对偶的集合.Scala有一个通用的叫法:元组, ...
- 【Todo】【读书笔记】大数据Spark企业级实战版 & Scala学习
下了这本<大数据Spark企业级实战版>, 另外还有一本<Spark大数据处理:技术.应用与性能优化(全)> 先看前一篇. 根据书里的前言里面,对于阅读顺序的建议.先看最后的S ...
- 基于.net的分布式系统限流组件 C# DataGridView绑定List对象时,利用BindingList来实现增删查改 .net中ThreadPool与Task的认识总结 C# 排序技术研究与对比 基于.net的通用内存缓存模型组件 Scala学习笔记:重要语法特性
基于.net的分布式系统限流组件 在互联网应用中,流量洪峰是常有的事情.在应对流量洪峰时,通用的处理模式一般有排队.限流,这样可以非常直接有效的保护系统,防止系统被打爆.另外,通过限流技术手段,可 ...
- Scala学习资源
Scala学习资源: Scala官方网站:http://www.scala-lang.org/ Scala github:https://github.com/scala/scala Twitter ...
- TweenMax动画库学习(四)
目录 TweenMax动画库学习(一) TweenMax动画库学习(二) TweenMax动画库学习(三) Tw ...
- 机器学习(三)--- scala学习笔记
Scala是一门多范式的编程语言,一种类似Java的编程语言,设计初衷是实现可伸缩的语言.并集成面向对象编程和函数式编程的各种特性. Spark是UC Berkeley AMP lab所开源的类Had ...
- SVG 学习<四> 基础API
目录 SVG 学习<一>基础图形及线段 SVG 学习<二>进阶 SVG世界,视野,视窗 stroke属性 svg分组 SVG 学习<三>渐变 SVG 学习<四 ...
- 【Scala】Scala学习资料
Scala学习资料 java 树形 分类器_百度搜索 决策树分类器-Java实现 - CSDN博客 KNN分类器-Java实现 - CSDN博客 学习:java设计模式—分类 - 飞翔荷兰人 - 博客 ...
随机推荐
- spring 使用外部属性文件
一.PropertyPlaceholderConfigurer spring提供的PropertyPlaceholderConfigurer实现类能够使Bean在配置时引用外部属性文件. Proper ...
- 表单元素的required,autocomplete,list用法
required: 当在一个表单元素如:input中加上required属性时,点击提交表单按钮,针对input会弹出一个默认的警告信息,如下图: 代码如下: <form id="my ...
- 使用Chrome开发者工具远程调试原生Android上的H5页面
Android4.4(KitKat)开始,使用Chrome开发者工具可以帮助我们在原生的Android应用中远程调试WebView网页内容.具体步骤如下: (1)设置Webview调试模式 可以在Ac ...
- MongoDB设置
添加mongodb用户组 groupadd mongodb 添加mongodb用户 useradd mongodb -g mongodb 将mongodb启动项目追加入rc.local保证mongod ...
- 大表分批删除脚本之MySQL版
经常需要定期对某些表删除历史数据,通常这样的表的数据又是非常巨大,为了减轻对线上环境的影响,删除时必须分成小批量来进行. 以前分享过SQLServer的版本. 下面是MySQL版本: delimite ...
- [MapReduce_add_1] Windows 下开发 MapReduce 程序部署到集群
0. 说明 Windows 下开发 MapReduce 程序部署到集群 1. 前提 在本地开发的时候保证 resource 中包含以下配置文件,从集群的配置文件中拷贝 在 resource 中新建 ...
- 网络编程——socket开发
Socket套接字方法 socket 实例类(8-10分钟) socket.socket(family=AF_INET, type=SOCK_STREAM, proto=0, fileno=None) ...
- Linux系统根据端口号来查看其进程并杀死进程
1.首先是查看某个端口号,(以httpd服务为例) 2.查看此端口下进程以及进程号 3.我们使用awk命令过滤出第二列,即进程号 4.杀死进程 报错的这一行表示,要杀死的进程PID为3754,但是没有 ...
- 配置私有SSH
1.cd ~/.ssh进入ssh文件夹. 2.ls,查看文件夹里面的内容 3.ssh-keygen -t rsa -C "zhanggui@marchsoft.cn” 一路回车 4.cd ~ ...
- Spring 自动清除缓存的配置
- spring.resources.chain.strategy.content.enabled=true - spring.resources.chain.strategy.content.pat ...