第十三章:集合

第十三章:集合

标签(空格分隔): scala课后习题


1.编写一个函数,给定字符串,产出一个包含所有字符的下标的映射。举例来说:indexes(“Mississippi”)应返回一个映射,让’M’对应集{0},’i’对应集{1,4,7,10},依此类推。使用字符到可变集的映射。另外,你如何保证集是经过排序的?

    def indexes(str :   String):Map[Char,List[Int]]={
        val freq =  Map[Char,List[Int]]()
        str.zipWithIndex.foreach(c=> freq(c._1) = freq.getOrElse(c._1,Nil):+ c._2)
        freq
    }

2.重复前一个练习,这次用字符到列表的不可变映射。

    def indexes2(str    :   String):scala.collection.immutable.Map[Char,List[Int]]={
        (scala.collection.immutable.Map[Char,List[Int]]() /: str.zipWithIndex){
            (m,c)=> m + (c._1 -> (m.getOrElse(c._1,Nil):+c._2))
        }

    }

3.编写一个函数,从一个整型链表中去除所有的零值。

    def wipeZero(nums : List[Int]):List[Int]={
//      nums.filterNot(_ == 0)
        nums.filter(_ !=0)
    }

4.编写一个函数,接受一个字符串的集合,以及一个从字符串到整数值的映射。返回整型的集合,其值为能和集合中某个字符串相对应的映射的值。举例来说,给定Array(“Tom”,”Fred”,”Harry”)和Map(“Tom”->3,”Dick”->4,”Harry”->5),返回Array(3,5)。提示:用flatMap将get返回的Option值组合在一起

    def containValueFromMap(list : List[String], map : Map[String,Int]):List[Int]={
        list.flatMap(map.get(_))
    }

5 实现一个函数,作用与mkString相同,使用reduceLeft。

trait MyMkString{
  this:mutable.Iterable[String]=>
  def myMkString = if( this != Nil) this.reduceLeft(_ + _)
}

6 给定整型列表lst,(lst :\ ListInt)(_ :: _ )得到什么?(ListInt /: lst)(_ :+ _)又得到什么?如何修改它们中的一个,以对原列表进行反向排序?
写段代码运行一下,不过还是没有搞懂这样做的意义是什么

val lst = List(1,2,3,4,5)

    println((lst :\ List[Int]())(_ :: _))

    println((List[Int]() /: lst)(_:+_))

    println((List[Int]() /: lst)((a,b) => b :: a))

你可能感兴趣的:(快学scala)