《快學Scala》第十三章習題解答
阿新 • • 發佈:2018-12-25
RT。
package com.scalalearn.scala.main import scala.collection.mutable import scala.collection.mutable.ArrayBuffer import scala.collection.parallel.immutable /** * 快學scala第13章習題解答 */ object LearnScala13 { //1.編寫一個函式,給定字串,產出一個包含所有字元的下標的對映 //舉例來說,indexs("Missingapi")應返回一個對映,讓'M'對應{0},'i'對應集{1,4,7,10}以此類推 //使用可變的集合對映 def execise1(input:String):mutable.HashMap[String,ArrayBuffer[String]] = { val map = new scala.collection.mutable.HashMap[String,ArrayBuffer[String]]() var index = 0 for(ch <- input){ if(!map.contains(ch.toString)) map.put(ch.toString,new ArrayBuffer[String]) var arr:ArrayBuffer[String] = map.get(ch.toString).get arr += index.toString index += 1 } map } //2.與第一題相同,這次用不可變對映集合 def execise2(input:String):scala.collection.immutable.HashMap[String,ArrayBuffer[String]] = { var map = new scala.collection.immutable.HashMap[String,ArrayBuffer[String]] var index = 0 for(ch <- input){ if(!map.contains(ch.toString)){ map = map + (ch.toString->new ArrayBuffer[String]) } var arr:ArrayBuffer[String] = map.get(ch.toString).get arr += index.toString index += 1 } map } //3.編寫一個函式,從整型連結串列裡去除所有零值 def execise3(list:mutable.ArrayBuffer[Integer]):mutable.ArrayBuffer[Integer]={ list.filter(_!=0) } //4.編寫一個函式,接受一個字串的集合和一個字串到整型的對映,返回整型集合 def execise4(arr:Array[String],map:Map[String,Integer]):Array[Integer] = { val filterArr:Array[String] = arr.filter(map.contains(_)) val flatRtn = filterArr.flatMap(word=>{ map.get(word) }) flatRtn } //5.編寫一個函式,作用於mkString相同,使用reduceLeft函式 def execise5(joinStr:String,strArr:Array[String]):String = { strArr.reduceLeft(_+joinStr+_) } //8.編寫一個函式,將Double陣列轉為二維陣列 def execise8(input:Array[Double],colnum:Integer):Array[Array[Double]] = { var rtn = new ArrayBuffer[Array[Double]] var count = input.length/colnum if(input.length % colnum != 0) count += 1 for(i <- 0 to count){ if(i != count - 1){ rtn += input.slice(i*colnum,(i+1)*colnum) }else{ rtn += input.slice(i*colnum,input.length) } } rtn.toArray } def main(args:Array[String]):Unit = { println("====================execise1=======================") println(LearnScala13.execise1("Mississippi")) println("====================execise2=======================") println(LearnScala13.execise2("Mississippi")) println("====================execise3=======================") var list3:mutable.ArrayBuffer[Integer] = new mutable.ArrayBuffer[Integer] list3 ++= ArrayBuffer(1,0,0,-1) println(LearnScala13.execise3(list3)) println("====================execise4=========================") println(LearnScala13.execise4(Array("Tom","Fred","Harry"),Map("Tom"->3,"Dick"->4,"Harry"->5))) println("====================execise5=========================") println(LearnScala13.execise5(" or ",Array("1111","2222","3333"))) println("====================execise8=========================") val arrs = LearnScala13.execise8(Array(1,2,3,4,5,6),3) for(elem <- arrs){ println(elem.mkString(" ")) } } }