/**
学习List
Array和List通用而且重要的方法:
1.max
2.min
3.sum
4.take
5.takeRight
6.drop
7.dropRight
8.head
9.last
10.union 并集
11.intersect 交集
12.diff 差集
13.distinct
14.mkString
15.reverse
16.filter
17.map
18.sortBy
19.reduce
20.flatMap
21.groupBy
重点掌握:① filter ② map ③sortBy ④reduce ⑤flatMap ⑥groupBy
*/
object Demo {
println("Welcome to the Scala worksheet") //> Welcome to the Scala worksheet
//创建一个定长List并赋值
val l1=List(1,2,3,4) //> l1 : List[Int] = List(1, 2, 3, 4)
//创建一个变长List并赋值
val l2=scala.collection.mutable.ListBuffer(1,2,3,4)
//> l2 : scala.collection.mutable.ListBuffer[Int] = ListBuffer(1, 2, 3, 4)
//通过下标操作List
l1.apply(0) //> res0: Int = 1
l1(0) //> res1: Int = 1
//Array和List之间可以相互转换
val a1=l1.toArray //> a1 : Array[Int] = Array(1, 2, 3, 4)
val l3=a1.toList //> l3 : List[Int] = List(1, 2, 3, 4)
//map方法。映射方法
//根据传入的匿名函数,将元素从一个形式映射为另外一个形式
//最后将结果返回到新的集合中
val r1=l1.map { num => num*2 } //> r1 : List[Int] = List(2, 4, 6, 8)
val r2=l1.map { num => num.toString } //> r2 : List[String] = List(1, 2, 3, 4)
//练习1:对l4做映射,要求返回的新的集合 List("tom","rose","jim")
val l4=List("tom M 23","rose F 18","jim M 30") //> l4 : List[String] = List(tom M 23, rose F 18, jim M 30)
val r3=l4.map { line => line.split(" ")(0) } //> r3 : List[String] = List(tom, rose, jim)
//练习2:计算出l4中所有人年龄的均值 List(23,18,30)
val r4=l4.map { line => line.split(" ")(2).toInt }
//> r4 : List[Int] = List(23, 18, 30)
val r5=r4.sum/r4.length //> r5 : Int = 23
//练习3:计算出l4中男性年龄的极差
val r6=l4.filter { line => line.split(" ")(1).equals("M") }
.map { line => line.split(" ")(2).toInt }
//> r6 : List[Int] = List(23, 30)
val r7=r6.max-r6.min //> r7 : Int = 7
val l5=List(2,1,3,5,4) //> l5 : List[Int] = List(2, 1, 3, 5, 4)
//sortBy 排序方法:按照指定的匿名函数规则实现排序
//并将排序后的结果返回到新的集合中
//按数字做升序排序
val r8=l5.sortBy { num => num } //> r8 : List[Int] = List(1, 2, 3, 4, 5)
//降序排序
val r9=l5.sortBy { num => num }.reverse //> r9 : List[Int] = List(5, 4, 3, 2, 1)
//注意:负号前需要加空格
val r10=l5.sortBy { num => -num } //> r10 : List[Int] = List(5, 4, 3, 2, 1)
//练习4:操作l6,返回按年龄做升序排序的结果
val l6=List("tom 23","rose 18","jim 30","jary 25")
//> l6 : List[String] = List(tom 23, rose 18, jim 30, jary 25)
val r11=l6.sortBy { line => line.split(" ")(1).toInt }
//> r11 : List[String] = List(rose 18, tom 23, jary 25, jim 30)
//练习5:计算出l6中年龄最大的前两个人的年龄均值
val r12=l6.sortBy { line => -line.split(" ")(1).toInt }
.take(2)
.map { line => line.split(" ")(1).toInt }
//> r12 : List[Int] = List(30, 25)
val r13=r12.sum/r12.length //> r13 : Int = 27
//reduce:归约方法
val l7=List(1,2,3,4,5) //> l7 : List[Int] = List(1, 2, 3, 4, 5)
//reduce方法底层的实现逻辑:
//①a=1 b=2 a+b=3
//②a=3 b=3 a+b=6
//③a=6 b=4 a+b=10
//...
val r14=l7.reduce{(a,b)=>a+b} //> r14 : Int = 15
//练习6:通过reduce求出l7这组数据阶乘的结果
val r15=l7.reduce{(a,b)=>a*b} //> r15 : Int = 120
//练习7:通过reduce返回l8中最大值。不能使用max方法
val l8=List(2,1,3,5,4) //> l8 : List[Int] = List(2, 1, 3, 5, 4)
//①a=2 b=1 result=2
//②a=2 b=3 result=3
//③a=3 b=5 result=5
//④a=5 b=4 result=5
val r16=l8.reduce{(a,b)=>if(a>b)a else b} //> r16 : Int = 5
//flatMap:扁平化映射。一般用于读取文件后,获取行中的单独数据
val l9=List("hello world","hello scala") //> l9 : List[String] = List(hello world, hello scala)
val r17=l9.flatMap { line => line.split(" ") } //> r17 : List[String] = List(hello, world, hello, scala)
//groupBy:分组,按照指定的分组条件进行分组,返回一个Map
val l10=List("hello","world","hello","world","hello")
//> l10 : List[String] = List(hello, world, hello, world, hello)
val r18=l10.groupBy { word => word } //> r18 : scala.collection.immutable.Map[String,List[String]] = Map(world -> L
//| ist(world, world), hello -> List(hello, hello, hello))
}
Scala学习-6.2集合类型List
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
相关阅读更多精彩内容
- 本教程介绍了Kang等人(2017)的[https://www.nature.com/articles/nbt.4...
- 基础类型 Swift通过var进行变量定义,通过let进行常量定义 Swift添加了类型推断,对于赋值的常量或者变...
- 数据类型 可以看出 scala 与java 中的类型基本上是一一对应的,不同的是 scala 中的字符类型首字母都...