val l1=List((“tom”,“M”,23),(“rose”,“F”,18),(“jim”,“M”,30),(“jary”,“M”,25))
val l2=List((“bj”,1),(“sh”,2),(“bj”,3),(“sh”,4))
val l3=List(“hello world”,“hello scala”,“hello world”)
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)
}