《Scala 4》--Scala的集合操作大全

本文详细介绍了Scala中的集合操作,包括合并集合、在集合前/后添加元素、聚合计算、取指定索引元素、字符操作、创建副本、转换操作等,并提供了丰富的示例代码。通过这些操作,可以灵活地对Scala集合进行处理和转换。
摘要由CSDN通过智能技术生成

集合操作:

 def ++[B](that: GenTraversableOnce[B]): Array[B]           【++
    合并集合,并返回一个新的数组,新数组包含左右两个集合对象的内容。
        
         val a = Array(1,2,3)
         val b = Array(3,4,5)
         val c = a ++ b
         print(c)
         print(c.toList)   //c中的内容是(1,2,3,3,4,5)
        类型返回已左侧为准!!   
         val a = List(1,2,3)
         val b = Array(3,4,5)
         val c = a ++ b

         val a = Array(1,2,3)
         val b = List(3,4,5)
         val c = a ++ b
    --------------------------------------------------------------------------------------------------------------------------------------
    def ++: [B >: A, That](that: collection.Traversable[B])(implicit bf: CanBuildFrom[Array[T], B, That]): That     【++:
    这个方法同上一个方法类似,两个加号后面多了一个冒号,但是不同的是右边操纵数的类型决定着返回结果的类型
     
        val a = Array(1,2,3)
        val b = List(3,4,5)
        val c = a ++: b
        print(c) 
        println(c.getClass().getName()) 
    --------------------------------------------------------------------------------------------------------------------------------------
    def +:(elem: A): Array[A]        【+:
        +:  在数组前面添加一个元素,并返回新的对象,下面添加一个元素 0,,,数组在运算符的右边
        val a = List(1,2)
        val c = 0 +: a // c中的内容是 (0,1,2)
    --------------------------------------------------------------------------------------------------------------------------------------
    def :+(elem: A): Array[A]        【  :+
        同上面的方法相似,在数组末尾添加一个元素,并返回新对象,,,数组在运算符的左边
        val a = List(1,2)
        val c = a :+ 0
        print(c)
    --------------------------------------------------------------------------------------------------------------------------------------
    def addString(b: StringBuilder): StringBuilder
    
        val a = List(1,2,3,4)
        val b = new StringBuilder()  // 带参数的字符串 val b = new StringBuilder("abc")
        val c = a.addString(b)      //将数组中的元素逐个添加到b中  c中的内容是  1234
    --------------------------------------------------------------------------------------------------------------------------------------
    def addString(b: StringBuilder, sep: String): StringBuilder
    同上,每个元素用sep分隔符分开
        val a = List(1,2,3,4)
        val b = new StringBuilder()
        val c = a.addString(b,",")
        println("c:  "+c)  // c:  1,2,3,4
    --------------------------------------------------------------------------------------------------------------------------------------
    def addString(b: StringBuilder, start: String, sep: String, end: String): StringBuilder
    同上,在首尾各加一个字符串,并指定sep分隔符
        val a = List(1,2,3,4)
        val b = new StringBuilder()
        val c = a.addString(b,"{",",","}")
        println("c:  "+c)  // c:  {1,2,3,4}
    --------------------------------------------------------------------------------------------------------------------------------------
    def mkString: String
    将所有元素组合成一个字符串
        val a = Array(1, 2, 3, 4, 5)
        println(a.mkString) // return  12345
    **************************************************************************************************************************************
    def mkString(sep: String): String
    将所有元素组合成一个字符串,以 sep 作为元素间的分隔符
        val a = Array(1, 2, 3, 4, 5)
        println(a.mkString(","))    // return  1,2,3,4,5
    **************************************************************************************************************************************
    def mkString(start: String, sep: String, end: String): String
    将所有元素组合成一个字符串,以 start 开头,以 sep 作为元素间的分隔符,以 end 结尾
        val a = Array(1, 2, 3, 4, 5)
        println(a.mkString("{",",","}"))    // return  {1,2,3,4,5}
**************************************************************************************************************************************
    【柯里化】:并不是指这个函数,而是这个函数具有柯里化的特征
    def aggregate[B](z: => B)(seqop: (B, T) => B, combop: (B, B) => B): B
          聚合计算,aggregate是柯里化方法,参数是两个方法,
    为了方便理解,我们把aggregate的两个参数,分别封装成两个方法,并把计算过程打印出来。
      def main(args: Array[String]) {
        val a = List(1,2,3,4)
        val c = a.par.aggregate(5)(seqno,combine)   //val c = a.aggregate(5)(seqno,combine)
        println("c:"+c)
      }
      def seqno(m:Int,n:Int): Int ={
        val s = "seq_exp=%d+%d"
        println(s.format(m,n))
        return m+n
      }
      def combine(m:Int,n:Int): Int ={
        val s = "com_exp=%d+%d"
        println(s.format(m,n))
        return m+n
      }
      /**  多次运行结果演示,并行度是变化的
        seq_exp=5+3
        seq_exp=5+2
        seq_exp=5+4
        seq_exp=5+1
        com_exp=6+7
        com_exp=8+9
        com_exp=13+17
        c:30
      */
    上面过程可以简写为
    val c = a.par.aggregate(5)(_+_,_+_)
       
    根据CPU核数,多次运行结果会不一样25  或  30 
    
    --------------------------------------------------------------------------------------------------------------------------------------
    取出指定索引处的元素:        【像数组一样,用下标索引
     val numbers = List(1,2,3,4)
     val first = numbers(0) // 读取第一个元素
     println("first:"+first)
    --------------------------------------------------------------------------------------------------------------------------------------
     def charAt(index: Int): Char
             获取index索引处的字符,这个方法会执行一个隐式的转换,将Array[T]转换为 ArrayCharSequence,                                           只有当T为char类型时,这个转换才会发生。
     val chars = Array('a','b','c')
     println("c:"+chars.charAt(0))   //结果 a
    --------------------------------------------------------------------------------------------------------------------------------------
    def clone(): Array[T]
    创建一个副本
    val chars = Array('a','b','c')
    val newchars = chars.clone()
    println("newchars:"+newchars.toList)
    --------------------------------------------------------------------------------------------------------------------------------------
    def collect[B](pf: PartialFunction[A, B]): Array[B]
    通过执行一个并行计算(偏函数),得到一个新的数组对象
       val chars = Array('a','b','c')
       val newchars = chars.collect(fun)
       println("newchars:"+newchars.mkString(","))
      //我们通过下面的偏函数,把chars数组的小写a转换为大写的A
      val fun:PartialFunction[Char,Char] = {
        case 'a' => 'A'
        case x => x
      }
      /**输出结果是 newchars:A,b,c */
    --------------------------------------------------------------------------------------------------------------------------------------
    def collectFirst[B](pf: PartialFunction[T, B]): Option[B]
    在序列中查找第一个符合偏函数定义的元素,并执行偏函数计算
     val arr = Array(1,'a',"b")
    //定义一个偏函数,要求当被执行对象为Int类型时,进行乘100的操作,对于上面定义的对象arr来说,只有第一个元素符合要求
      val fun:PartialFunction[Any,Int] = {
        case x:Int => x*100
      }
    //计算
      val value = arr.collectFirst(fun)
      println("value:"+value)
    //另一种写法
      val value = arr.collectFirst({case x:Int => x*100})
    
    --------------------------------------------------------------------------------------------------------------------------------------
    def map[B](f: (A) => B): Array[B]
    val a = List(1, 2, 3,4)
    println(a.map(x=>x))

    
    val a = List(List(1, 2), List(3,4))
    println(a.map(x=>x)) 
    println(a.map(x => x.sum))
    

    val lines=List("hello tom hello jerry","hello tom hello kitty hello china")    
    lines.map(_.split(" "))
    拿到每一个元素(字符串),按照空格切割,切割后返回两个数组,仍放在List中
    res0: List[Array[String]] = List(Array(hello, tom, hello, jerry), Array(hello, tom, hello, kitty, hello, china))

    --------------------------------------------------------------------------------------------------------------------------------------
    def flatten[U](implicit asTrav: (T) => collection.Traversable[U], m: ClassTag[U]): Array[U]
    将二维数组的所有元素联合在一起,形成一个一维数组返回
    val dArr = Array(Array(1,2,3),Array(4,5,6))
    val c = dArr.flatten
    println(c)  
    -------------------------------------------------------------------------------                                                                                                            flatMap:
    flatMap=map+flatten
    map把每个元素都做一个相同的操作,flatten是把嵌套的变成在同一个里面,
    如val f = List(List(1,2),List(3,4),List(5,6)) 执行 f.flatten的结果就是List(1,2,3,4,5,6)
    所以f.flatMap(_.map(*2))的结果是List(2,4,6,8,10,12)相当于f.map(_.map(*2)).flatten,是先执行map,再执行flatten
 
 
    val lines=List("hello tom hello jerry","hello tom hello kitty hello china

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值