1. 程式人生 > >快學scala習題(四)

快學scala習題(四)

本章為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))