Scala | Scala集合的综合练习

本文通过一系列的Scala集合练习题,包括统计年龄和、筛选男性最高年龄、按地区分组、单词频次统计等,深入理解Scala集合操作及函数式编程技巧。

综合练习:

val l1=List((“tom”,“M”,23),(“rose”,“F”,18),(“jim”,“M”,30),(“jary”,“M”,25))

  • 练习1:统计出所有人的年龄和
  • 练习2:返回男性年龄最高的前两个人的数据,返回的形式:List(“jim-M”,“jary-M”)

val l2=List((“bj”,1),(“sh”,2),(“bj”,3),(“sh”,4))

  • 练习3:操作l2,返回按地区分组的结果

val l3=List(“hello world”,“hello scala”,“hello world”)

  • 练习4:统计出l3中的单词频次。最后统计出的结果:Map(hello->3,world->2,scala->1)
  • 练习5:统计出单词频次。不能使用length或size方法(可以使用sum或reduce来统计出频次)
object Demo09 {
  println("Welcome to the Scala worksheet")       //> Welcome to the Scala worksheet
  
  //练习1:统计出所有人的年龄和
  val l1=List(("tom","M",23),("rose","F",18),("jim","M",30),("jary","M",25))
                                                  //> l1  : List[(String, String, Int)] = List((tom,M,23), (rose,F,18), (jim,M,30)
                                                  //| , (jary,M,25))
  
  val r1=l1.map{x=>x._3}.sum                      //> r1  : Int = 96
  val r2=l1.map{case(name,gender,age)=>age}.sum   //> r2  : Int = 96
  
  //练习2:返回男性年龄最高的前两个人的数据,返回的形式:List("jim-M","jary-M")
  val r3=l1.filter{x=>x._2.equals("M")}
  				 .sortBy{x=> -x._3}
  				 .take(2)
  				 .map{x=>x._1+"-"+x._2}
                                                  //> r3  : List[String] = List(jim-M, jary-M)
  //练习3:操作l2,返回按地区分组的结果
  val l2=List(("bj",1),("sh",2),("bj",3),("sh",4))//> l2  : List[(String, Int)] = List((bj,1), (sh,2), (bj,3), (sh,4))
  
  val r4=l2.groupBy{x=>x._1}                      //> r4  : scala.collection.immutable.Map[String,List[(String, Int)]] = Map(bj ->
                                                  //|  List((bj,1), (bj,3)), sh -> List((sh,2), (sh,4)))
  
  
  //练习4:统计出l3中的单词频次。最后统计出的结果:Map(hello->3,world->2,scala->1)
  val l3=List("hello world","hello scala","hello world")
                                                  //> l3  : List[String] = List(hello world, hello scala, hello world)
  val r5=l3.flatMap { line =>line.split(" ") }
  				 .groupBy { word => word }
  				 .map{case(k,v)=>(k,v.length)}
                                                  //> r5  : scala.collection.immutable.Map[String,Int] = Map(scala -> 1, world -> 
                                                  //| 2, hello -> 3)
  val r6=l3.flatMap { line =>line.split(" ") }
  				 .groupBy { word => word }
  				 .mapValues { v => v.length }
                                                  //> r6  : scala.collection.immutable.Map[String,Int] = Map(scala -> 1, world -> 
                                                  //| 2, hello -> 3)
  				 
  //练习5:接着往下写,统计出单词频次。不能使用length或size方法
  //可以使用sum或reduce来统计出频次
  val r7=l3.flatMap { line => line.split(" ") }
  				 .map { word =>(word,1) }
  				 .groupBy{x=>x._1}
  				 .mapValues{list=>list.map{x=>x._2}.sum}
                                                  //> r7  : scala.collection.immutable.Map[String,Int] = Map(scala -> 1, world ->
                                                  //|  2, hello -> 3)
  val r8=l3.flatMap {_.split(" ") }
  				 .map {(_,1) }
  				 .groupBy{_._1}
  				 .mapValues{_.map{_._2}.sum}
                                                  //> r8  : scala.collection.immutable.Map[String,Int] = Map(scala -> 1, world ->
                                                  //|  2, hello -> 3)
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值