• Scala-集合


    1、空集合Nil,以及右结合

    
    object controllAbstract {
    
      def main(args: Array[String]): Unit = {
        //向空集合Nil中添加元素
        //双冒号是右结合
       // println((1::2::Nil));
        //List(1, 2)
        val list = List(1,2,4);
        val list1 =  8::list;//创造了一个新集合,原来的list集合元素没有变
        println(list);
        println(list1);
        //List(1, 2, 4)
    //    List(8, 1, 2, 4)
      }
    }
    

    2、递归方法求list元素之和

    
    object controllAbstract {
    
      def sum(list: List[Int]):Int ={
        if(list == Nil) 0 else list.head+sum(list.tail);//从头部开始一个一个元素取出来
      }
    
      def main(args: Array[String]): Unit = {
    
        val list = List(1,3,4);
        val result =  sum(list);
        println(result);
    
      }
    }
    

    3、模式匹配case match

    object controllAbstract {
    
    //模式匹配
      def sum(list: List[Int]):Int = list match {
        case Nil =>0
        case a::b => a + sum(b);//将list集合拆分成头部a和尾部集合b
          //其实也是相当于list.head+sum(list.tail)的递归
      }
    
      def main(args: Array[String]): Unit = {
        val list = List(1,3,4,5,6);
        val result =  sum(list);
        println(result);
    
      }
    }

    4、可变列表linkedlist

    
    import scala.collection.mutable._
    
    object controllAbstract {
      def main(args: Array[String]): Unit = {
    
        //可变列表linkedlist
        val list = LinkedList(12,4,4,0,-2,-9);
        var cur = list;
        while (cur!=Nil){
          if(cur.elem < 0) cur.elem =0;
          cur =  cur.next;
        }
        for(i <- list) println(i);
    
      }
    }
    
    
    import scala.collection.mutable._
    
    object controllAbstract {
      def main(args: Array[String]): Unit = {
    
        //可变列表linkedlist
        val list = LinkedList(12,4,4,0,-2,-9);
        var cur = list;
        while (cur!=Nil){
          if(cur.elem < 0) cur.elem =0;
          cur =  cur.next;
          println(cur);
        }
        /*
        LinkedList(4, 4, 0, -2, -9)
    LinkedList(4, 0, -2, -9)
    LinkedList(0, -2, -9)
    LinkedList(-2, -9)
    LinkedList(-9)
    LinkedList()
         */
    //    for(i <- list) println(i);
    
      }
    }
    

    5、添加元素操作符

        object controllAbstract {
          def main(args: Array[String]): Unit = {
    
            val list = List(1,3,4);
            val list2 =  list:+2;//左结合,加在list集合后面
            val list3 =  3::list;//右结合,加在list前面
            for(j<- list) print(j);
            println("===");
            for(i<- list2) print(i);
            println("====");
            for(k<- list3) print(k);
            /*134===
            1342====
            3134
        */
    
      }
    }
    

    6、set集合

        object controllAbstract {
          def main(args: Array[String]): Unit = {
    
          val set = Set(1,2,3);
            val set1 = set + (12);
             for(i <- set1)  print(i+",");
            println("========");
            for(i <- set) print(i+",");
      }
    }
    

    7、集合相加

        object controllAbstract {
          def main(args: Array[String]): Unit = {
    
        val list = List(1,3,4);
            val list1 = List(1,2,4);
            val list2 = list ++ list1;//任意两个集合相加
            for(i <- list2) print(i);
      }
    }
    

    8、++: –》任意两个集合 右结合

        object controllAbstract {
          def main(args: Array[String]): Unit = {
    
            val list = List(1,4);
            val list1  = List(2,3);
            val list2 = list ++:list1;//表示在list1前面加list
            val list3 = list1 ++: list;//等价于:::
            val list4 = list1 ++ list;//等价于::
            for(i<- list2) print(i);
            println("==");
            for(i<- list3) print(i);
            println("==");
            for(i<-list4) print(i);
            /*
            1423==
            2314==
            2314
             */
    
      }
    }
    

    9、set集合的交集,并集,差异集合

        object controllAbstract {
          def main(args: Array[String]): Unit = {
    
          val set = Set(1,3,5);
            val set1 = Set(1,2,5);
            val set2 = set | set1;//并集
            for(i <- set2) print(i+"-");
            println("==");
            val set3 = set & set1;//交集
            for(i<- set3) print(i+"-");
            println("==");
            val set4 = set &~ set1;//两个集合的差异元素
            println("==");
            for(i<-set4)print(i+"-");
    /*
    1-3-5-2-==
    Disconnected from the target VM, address: '127.0.0.1:58811', transport: 'socket'
    1-5-==
    ==
    3-
     */
    
      }
    }
    

    10、+= /++=/-=/–=操作的是可变集合

    import scala.collection.mutable.Set
    
    object controllAbstract {
          def main(args: Array[String]): Unit = {
    
            val set = Set(1,2,4);//这里的set是可变的集合
            set +=11;
            for(i<-set) print(i+"->");
      }
    }
    
    import scala.collection.mutable.Set
    
    object controllAbstract {
          def main(args: Array[String]): Unit = {
    
            val set = Set(1,2,4,5,6,7,8);//这里的set是可变的集合
            val set1 = Set(5,6);
            set +=11;//+=用来操纵元素 ++=用来操作集合
            set -= 1;
            set --= set1;//--=也用来操作集合
            for(i<-set) print(i+"->");
            //2->7->4->11->8->
      }
    }
    

    11、take,drop,splitAt,ZIP

    import scala.collection.mutable.Set
    import scala.collection.mutable.ArrayBuffer
    
    object controllAbstract {
      def main(args: Array[String]): Unit = {
    
        //拉链操作
        val arr = Array(5, 6, 6, 7, 1, 2, 4);
        val arr1 = ArrayBuffer(23, 4, 5, 6);
        val arr5 = ArrayBuffer("hello","world","nihao");
        val arr2 = arr.zip(arr1);
        for(i<-arr2) print(i+"->");//(5,23)->(6,4)->(6,5)->(7,6)->
        println();
        val arr3 = arr.zipAll(arr1,-1,-2);//表示的意思是如果arr1不够就用-2,arr不够就用-1
        for(i<-arr3)print(i+"<-");//(5,23)<-(6,4)<-(6,5)<-(7,6)<-(1,-2)<-(2,-2)<-(4,-2)<-
        val arr4 = arr.zipWithIndex;//和自己的索引形成元组(5,0)->(6,1)->(6,2)->(7,3)->(1,4)->(2,5)->(4,6)->
        println();
        for(i<-arr4)print(i+"->");
        val arr6 =  arr5.map(_.toUpperCase());//利用高阶函数map将数组的每个元素都转换为大写ELLO<-WORLD<-NIHAO<-
        println();
        for(i<-arr6)print(i+"<-");
        //********************************************
        //       val arr1 =  arr.init;//去掉了最后一个元素
        //       val arr1 =  arr.take(2);//获取前两个元素
        //        val arr1 = arr.drop(2);//删除前两个元素
        //        val (prefix,suffix) = arr.splitAt(3);//在第三个元素的后面进行切割
        //        for(i<-arr) print(i+"->");
        //        println("
    ");
    
        //        for(i <- prefix) print(i+"->");//
        //        println("《=前缀");
        //        for(i <- suffix) print(i+"->");//
        //        println("<=后缀");
    
      }
    }
    
    

    12、列表的折叠化简操作

    import scala.collection.mutable.Set
    import scala.collection.mutable.ArrayBuffer
    
    object controllAbstract {
      def main(args: Array[String]): Unit = {
    
        val list = List(2,5,6);
        //列表的折叠操作
        val result =  list.foldRight(1)(_ - _);//将初始值放在右边
        //2 -(5 -(6 -1))=2
        println(result);
        val result1 = list.foldLeft(1)(_ - _);//将初始值放在左边
        //((1 -2) -5) -6=-12
        println(result1);
    
    
    
      }
    }
    
    欢迎关注我的公众号:小秋的博客 CSDN博客:https://blog.csdn.net/xiaoqiu_cr github:https://github.com/crr121 联系邮箱:rongchen633@gmail.com 有什么问题可以给我留言噢~
  • 相关阅读:
    php memcache分布式和要注意的问题
    PHP延迟静态绑定(本文属于转发)
    WebSocket实战
    HTML5本地存储(Local Storage) 的前世今生
    HTML5本地存储——IndexedDB
    HTML5 FileReader
    HTML5 FormData对象
    2017-2018-1 20155225 实验四 外设驱动程序设计
    2017-2018-1 20155225 《信息安全系统设计基础》第十一周学习总结
    Linux下的IPC机制
  • 原文地址:https://www.cnblogs.com/flyingcr/p/10327094.html
Copyright © 2020-2023  润新知