《快学Scala》第十三章习题解答

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(" "))
    }
  }
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值