快學scala習題(四)
阿新 • • 發佈:2019-01-10
本章為Map的使用
1.設定一個對映,在根據之前的對映來生成第二個對映
val itemprice=Map("Exlier" -> 150,"Potion" -> 50,"Phoneix" ->200);
val itemprice1=new scala.collection.mutable.HashMap[String,Double];
for ((k,v)<- itemprice){
itemprice1+=(k -> v*0.9);
}
2.讀取檔案,並計數,因為+號會覆蓋,所以需要判斷是否存在key
def readfile(fileName:String){
var in =new java.util.Scanner(new java.io.File(fileName));
val halscore = new scala.collection.mutable.HashMap[String,Int];
var count=1;
while(in.hasNext()){
halscore=(in->next() -> (halscore.getorElse(in.next(),0)+1);
}
halscore.foreach(println)
}
3.同2,採用不可變對映
不可變對映申請方式
var in=new java.util.Scanner(new java.io.File(fileName));
//val halscore = new scala.collection.mutable.HashMap[String,Int];
var halscore= Map[String,Int]() ;
var count=1;
while(in.hasNext()){
val arg=in.next();
halscore = halscore + (arg -> (halscore.getOrElse (arg,0) + 1))
}
halscore.foreach(println)
4.記住包含import scala.collection.immutable.SortedMap
def readfile(fileName:String){
var in=new java.util.Scanner(new java.io.File(fileName));
//val halscore = new scala.collection.mutable.HashMap[String,Int];
var halscore= SortedMap[String,Int]();
var count=1;
while(in.hasNext()){
val arg=in.next();
halscore = halscore + (arg -> (halscore.getOrElse(arg,0) + 1))
}
halscore.foreach(println)
}
5.記住包含轉換包import scala.collection.JavaConversions.mapAsScalaMap;
var in=new java.util.Scanner(new java.io.File(fileName));
//val halscore = new scala.collection.mutable.HashMap[String,Int];
val map:Map[String,Int] = new TreeMap[String,Int]
var count=1;
while(in.hasNext()){
val arg=in.next();
map(arg)=map.getOrElse(arg, 0)+1;
}
map.foreach(println)
6.
val keys=Array(MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY,SUNDAY);
val values=Array("MONDAY","TUESDAY","WEDNESDAY","THURSDAY","FRIDAY","SATURDAY","SUNDAY");
val map=keys.zip(values);
var Tmap=map.toMap[Int,String];
Tmap.foreach(println);`
7.打印出所有java的系統屬性
獲取屬性的方法
import scala.collection.JavaConversions.propertiesAsScalaMap;
val props:Map[String,String]=System.getProperties();
找出最長鍵的長度,並進行列印
var maxlen=0;
for((k,v) <- props) {
if(k.length()>maxlen){
maxlen=k.length();
}
}
for((k,v)<- props){
println(k+" "*(maxlen-k.length())+"|"+v);
}
8.找出陣列中的最大值和最小值,並以元組返回
def findmaxminValue(arr:Array[Int]):Tuple2[Int,Int] ={
var Max=arr(1);var min=arr(1);
for(i<- 0 until arr.length){
if(Max<arr(i)){
Max=arr(i);
}
if(min>arr(i)){
min=arr(i);
}
}
(Max,min);
}
9.找出陣列中小於輸入值的個數,大於的個數,等於的個數,並且要同時返回,因為是第四章,可以基於元組來返回
def findvalue(arr:Array[Int],v:Int):Tuple3[Int,Int,Int] ={
var sumBig=0;var sumSmall=0;var sumEquel=0;
arr.foreach((i:Int) => if(i>v) sumBig=sumBig+1 else if(i<v) sumSmall=sumSmall+1 else sumEquel=sumEquel+1 );
(sumBig,sumSmall,sumEquel);
}
10.將字串拉鍊起來,可以從下面的結果看出,將字串拆開後並加入到Vector中
"Hello".zip("World");
res0: scala.collection.immutable.IndexedSeq[(Char, Char)] = Vector((H,W), (e,o), (l,r), (l,l), (o,d))