美文网首页
2020-11-08-Scala-28-(集合 模式匹配练习题)

2020-11-08-Scala-28-(集合 模式匹配练习题)

作者: 冰菓_ | 来源:发表于2020-11-09 07:43 被阅读0次

    案例一:对map映射模式匹配的理解,尽量使用map.get(key)

    object Test1 {
      def main(args: Array[String]): Unit = {
        var st = "Mississippi"
        println(indexs(st))
    
      }
    
      def indexs(txt: String) = {
        //有序的
        var map = mutable.Map[Char, mutable.SortedSet[Int]]()
        var i = 0
      /*  data =>
          map.get(data) match {
            case Some(value) => map(data) = value + i
            case None => map += (data -> mutable.SortedSet[Int] {
              i
            })
    
          }
          i += 1*/
        txt.foreach { data =>
          map.get(data) match {
            case Some(value) => map(data) = value + i
            case None => map += (data -> mutable.SortedSet[Int] {
              i
            })
    
          }
          i += 1
        }
        map
      }
    }
    

    案例二:编写一个函数,从一个整型链表中去除所有的零值。

    object Test3 {
      def main(args: Array[String]): Unit = {
           var list = List(1,2,3,0,3,0,1,0)
            println(list.filter(_ != 0))
      }
    }
    

    案例三(注意Option集合)

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

    object Test3 {
      def filterMap(arr: Array[String], map: Map[String, Int]) = {
        // map.get返回Some(v), 才会被返回
        arr.flatMap(map.get)
      }
    
      def main(args: Array[String]) {
        println(filterMap(Array("Tom", "Fred", "Harry"),
          Map("Tom" -> 3, "Dick" -> 4, "Harry" -> 5)).mkString(","))
      }
    }
    

    案例四(grouped方法的使用,这是一个重要的例题,有时候打印结果是地址值)

    编写一个函数。将Double数组转换成二维数组。传入列数作为参数。举例来说,Array(1,2,3,4,5,6)和三列,返回Array(Array(1,2,3),Array(4,5,6))。用grouped方法。

    object Test4 {
      def main(args: Array[String]): Unit = {
            var  array = Array[Double](1,2,3,4,5,6)
        //a是一个数组,不能直接打印使用 mkstring转换
           change(array, 3)foreach(a => println(a.mkString(",")))
      }
    
      def  change(array: Array[Double],n:Int)={
    
        array.grouped(n).toArray
      }
    }
    

    案例五(匹配嵌套结构,这是一道难题)

    abstract class Item
    case class Article(description: String, price: Double) extends Iten
    case class Bundle(description: String, discount: Double, item: Item*) extends Item
    Bundle("Father's day special", 20.0,
      Article("Scala for the Impatient", 39.95),
      Bundle("Anchor Distillery Sampler", 10.0)
        Article("Old potrero Straight Rye Whisky", 69.21),
        Article("Junipero Gin", 79.95),
    case Bundle(_, _, Article(descr, _), _*) => ...
    def price(it: Item): Double = it match {
        case Article(_, p) => p
        case Bundle(_, disc, its @ _*) => its.map(price _).sum - disc
    }
    
    

    案例六(利用模式匹配,编写一个swap函数,交换数组中的前两个元素的位置,前提条件是数组长度至少为2)

    object Test4 {
      def main(args: Array[String]): Unit = {
        var  array = Array[Double](1,2,3,4,5,6)
           array = array match {
             case  Array(first ,second , re @ _*)  => Array(second,first) ++ re
           }
            println(array.mkString(","))
      }
    

    相关文章

      网友评论

          本文标题:2020-11-08-Scala-28-(集合 模式匹配练习题)

          本文链接:https://www.haomeiwen.com/subject/dbwyvktx.html