Scala学习-6.1集合类型

/**
scala的集合类型(Collection)包含如下常见的类型:
Array,List,Set,Range,Iterator,Map,Tuple

知识点
1.scala的Array分为定长数组和变长数组
2.定长:immutable
3.变长:mutable
4.通过下标操作Array,下标从0开始。通过(index),不同于java的[index]
*/
object Demo {
  println("Welcome to the Scala worksheet")       //> Welcome to the Scala worksheet
  
  //创建一个定长数组并赋值
  val a1=Array(1,2,3,4)                           //> a1  : Array[Int] = Array(1, 2, 3, 4)
  //创建一个定长数组,指定泛型以及长度
  val a2=new Array[Int](3)                        //> a2  : Array[Int] = Array(0, 0, 0)
  //创建变长数组并赋值。可以追加新元素的
  val a3=scala.collection.mutable.ArrayBuffer(1,2,3,4)
                                                  //> a3  : scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(1, 2, 3, 4)
  //通过下标取值
  a1.apply(0)                                     //> res0: Int = 1
  a1(0)                                           //> res1: Int = 1
  //通过下标赋值
  a1(0)=10
  a1                                              //> res2: Array[Int] = Array(10, 2, 3, 4)
  //对变长Array追加数据
  a3.append(5,6)
  a3                                              //> res3: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(1, 2, 3, 4, 5,
                                                  //|  6)
     //常用且重要的方法
     val a4=Array(2,1,3,5,4)                   //> a4  : Array[Int] = Array(2, 1, 3, 5, 4)
     
     //最大值
     val r1=a4.max                             //> r1  : Int = 5
     //最小值
    val r2=a4.min                             //> r2  : Int = 1
    //求和
    val r3=a4.sum                             //> r3  : Int = 15
     
     //练习1:求出a4的均值
     val r4=a4.sum/a4.length                   //> r4  : Int = 3
     
     //取出前n个元素,并返回到新的集合中
     val r5=a4.take(2)                         //> r5  : Array[Int] = Array(2, 1)
     //取出后n个元素,并返回到新的集合中
     val r6=a4.takeRight(2)                    //> r6  : Array[Int] = Array(5, 4)
     //删除前n项元素,并返回剩余元素到新的集合中
     val r7=a4.drop(2)                         //> r7  : Array[Int] = Array(3, 5, 4)
     //删除后n项元素,并返回剩余元素到新的集合中
     val r8=a4.dropRight(2)                    //> r8  : Array[Int] = Array(2, 1, 3)
     
     val a5=Array(2,1,5,2,6,8,9)               //> a5  : Array[Int] = Array(2, 1, 5, 2, 6, 8, 9)
     
     //练习2:计算出a5中间项(刨除首项和尾项)的极差(最大值-最小值)
     val r9=a5.drop(1).dropRight(1)            //> r9  : Array[Int] = Array(1, 5, 2, 6, 8)
     val r10=r9.max-r9.min                     //> r10  : Int = 7
     
     //返回集合的头元素,有别于take(1)
     val r11=a5.head                           //> r11  : Int = 2
     val r12=a5.take(1)                        //> r12  : Array[Int] = Array(2)
     //返回集合尾元素,有别于takeRight(1)
     val r13=a5.last                           //> r13  : Int = 9
     val r14=a5.takeRight(1)                   //> r14  : Array[Int] = Array(9)
     
     val a6=Array(1,2,3)                       //> a6  : Array[Int] = Array(1, 2, 3)
     val a7=Array(3,4,5)                       //> a7  : Array[Int] = Array(3, 4, 5)
     
     //并集
     val r15=a6.union(a7)                      //> r15  : Array[Int] = Array(1, 2, 3, 3, 4, 5)
     //交集,返回相同的数据到新的集合中
     val r16=a6.intersect(a7)                  //> r16  : Array[Int] = Array(3)
     //差集,返回相异的数据到新的集合中。
     //注意取差集时的方向
     val r17=a6.diff(a7)                       //> r17  : Array[Int] = Array(1, 2)
     val r18=a7.diff(a6)                       //> r18  : Array[Int] = Array(4, 5)
     
     //去掉重复元素,并返回到一个新的集合中
     val r19=r15.distinct                      //> r19  : Array[Int] = Array(1, 2, 3, 4, 5)
     
     val a8=Array("hello","scala","2002")      //> a8  : Array[String] = Array(hello, scala, 2002)
     
     //翻转方法
     val r20=a8.reverse                        //> r20  : Array[String] = Array(2002, scala, hello)
     //将集合中所有的数据返回为一个字符串,可以指定分隔符
     val r21=a8.mkString                       //> r21  : String = helloscala2002
     val r22=a8.mkString("#")                  //> r22  : String = hello#scala#2002
     
     val a9=Array(1,2,3,4,5)                   //> a9  : Array[Int] = Array(1, 2, 3, 4, 5)
     val r23=a9.mkString                       //> r23  : String = 12345
     
     //filter:过滤方法。根据传入的匿名函数实现过滤
     //比如过滤出a9中大于3的所有元素
     val r24=a9.filter {num=>num>3 }           //> r24  : Array[Int] = Array(4, 5)
     
     //练习3:过滤出a9中大于2的偶数元素
     val r25=a9.filter { num =>num>2&&num%2==0 }
                                                  //> r25  : Array[Int] = Array(4)
     
     //练习4:过滤出a10所有的男性数据
     val a10=Array("tom M 23","rose F 18","jim M 25")
                                                  //> a10  : Array[String] = Array(tom M 23, rose F 18, jim M 25)
     
     val r26=a10.filter { line =>line.contains("M") }
                                                  //> r26  : Array[String] = Array(tom M 23, jim M 25)
     val r27=a10.filter { line =>line.split(" ")(1).equals("M") }
                                                  //> r27  : Array[String] = Array(tom M 23, jim M 25)
     
     //scala的类型转换,格式固定,to指定类型
     val v1=100                                //> v1  : Int = 100
     v1.toString()                             //> res4: String = 100
     v1.toDouble                               //> res5: Double = 100.0
     
     val v2="100"                              //> v2  : String = 100
     v2.toInt                                  //> res6: Int = 100
     
     //练习5:过滤出a10中,年龄大于20的所有数据
     val r28=a10.filter { line => line.split(" ")(2).toInt>20 }
                                                  //> r28  : Array[String] = Array(tom M 23, jim M 25)
     
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 230,247评论 6 543
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 99,520评论 3 429
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 178,362评论 0 383
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 63,805评论 1 317
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 72,541评论 6 412
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 55,896评论 1 328
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 43,887评论 3 447
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 43,062评论 0 290
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 49,608评论 1 336
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 41,356评论 3 358
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 43,555评论 1 374
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 39,077评论 5 364
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 44,769评论 3 349
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 35,175评论 0 28
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 36,489评论 1 295
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 52,289评论 3 400
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 48,516评论 2 379

推荐阅读更多精彩内容