- 设置一个映射,其中包含你想要的一些装备,以及它们的价格。然后构建另一个映射,采用同一组键,但是价格上打9折
val map = Map("装备1"->10,"装备2"->20,"装备3"->30)
val newMap = map.map(x => (x._1, x._2 * 0.9))
println(newMap)
输出结果:
Map(装备1 -> 9.0, 装备2 -> 18.0, 装备3 -> 27.0)
- 编写一段程序,从文件中读取单词。用一个可变映射来清点每个单词出现的频率。读取这些单词的操作可以使用java.util.Scanner:
val in = new java.util.Scanner(new java.io.File(“myfile.txt”)) while(in.hasNext()) 处理 in.next() 或者翻到第9章看看更Scala的做法。 最后,打印出所有单词和它们出现的次数。
val in = new Scanner(new File("myfile.txt"))
val map = mutable.Map[String,Int]()
while (in.hasNext()){
val strArr = in.next().split(" ")
for(elem <- strArr){
map(elem)= map.getOrElse(elem,0)+1
}
}
in.close()
println(map)
3 重复前一个练习,这次用不可变的映射
不可变映射每次添加元素,会返回一个新的映射
val in = new Scanner(new File("myfile.txt"))
var map = Map[String,Int]()
while (in.hasNext()){
val strArr = in.next().split(" ")
for(elem <- strArr){
map += (elem -> (map.getOrElse(elem,0)+1))
}
}
in.close()
println(map)
4 重复前一个练习,这次使用已排序的映射,以便单词可以按顺序打印出来
使用sortedMap
var sortedMap = SortedMap[String,Int]()
val in = new Scanner(new File("myfile.txt"))
while (in.hasNext()){
val strArr = in.next().split(" ")
for(elem <- strArr){
sortedMap += (elem -> (sortedMap.getOrElse(elem,0)+1))
}
}
in.close()
println(sortedMap)
- 重复前一个练习,这次使用java.util.TreeMap并使之适用于Scala API
引入import scala.collection.JavaConversions.mapAsScalaMap
import scala.collection.JavaConversions.mapAsScalaMap
val treeMap:scala.collection.mutable.Map[String,Int] = new java.util.TreeMap[String, Int]
val in = new Scanner(new File("myfile.txt"))
while (in.hasNext()){
val strArr = in.next().split(" ")
for(elem <- strArr){
treeMap(elem) = treeMap.getOrElse(elem,0)+1
}
}
in.close()
println(treeMap)
6 定义一个链式哈希映射,将"Monday"映射到java.util.Calendar.MONDAY,依次类推加入其他日期。展示元素是以插入的顺序被访问的
使用LinkedHashMap
val linkedMap=new mutable.LinkedHashMap[String,Int]
linkedMap += ("Monday"->java.util.Calendar.MONDAY)
linkedMap += ("Tuesday"->java.util.Calendar.TUESDAY)
linkedMap += ("Wednesday"->java.util.Calendar.WEDNESDAY)
linkedMap += ("Thursday"->java.util.Calendar.THURSDAY)
linkedMap += ("Friday"->java.util.Calendar.FRIDAY)
linkedMap += ("Saturday"->java.util.Calendar.SATURDAY)
linkedMap += ("Sunday"->java.util.Calendar.SUNDAY)
println(linkedMap)
7 打印出所有Java系统属性的表格
Java系统属性:System.properties
Properties类型转scala的Map类型
import scala.collection.JavaConversions.propertiesAsScalaMap
val properties:scala.collection.Map[String,String] = System.getProperties
var maxLen = -1
for(k<-properties.keySet){
if(maxLen<k.length)
maxLen = k.length
}
for((k,v)<-properties){
println(k+" "*(maxLen-k.length)+" | "+v)
}
8 编写一个函数minmax(values:Array[Int]),返回数组中最小值和最大值的对偶
def minmax(values:Array[Int]): (Int,Int) ={
(values.reduceLeft(_.min(_)),values.reduceLeft(_.max(_)))
}
9 编写一个函数Iteqgt(values:Array[int],v:Int),返回数组中小于v,等于v和大于v的数量,要求三个值一起返回
def Iteqgt(values:Array[Int],v:Int)={
(values.count(_<v),values.count(_==v),values.count(_>v))
}
10 当你将两个字符串拉链在一起,比如"Hello".zip(“World”),会是什么结果?想出一个讲得通的用例
println("hello".zip("world"))
结果:Vector((h,w), (e,o), (l,r), (l,l), (o,d))