大数据系列修炼-Scala课程32

大数据系列修炼-Scala课程32

核心内容:
1、List的基本操作实战
2、基于模式匹配的List排序算法实现

1、List的基本操作实战

声明List的三种方式:
1>常见的声明方式:val data = ListInt
2>::(2个冒号)+Nil的方式:val data2 = 10::(20::30::15::Nil)
从整体结构上而言:Scala中的List其实只是由两部分构成:一部分是head部分,即Scala中的第一个元素;
一部分是tail部分,即List中除第一个元素以外的的其它元素的集合
3>声明List的第三种方式:与模式进行结合,通过这种方式可以很容易的获取到List集合中的内容或前几个元素

实例程序:

object App8
{
    def main(args:Array[String]):Unit=
    {
        val arr1 = Array[Int](10,20,30,5)
        //声明List的第一种方式:
        println("List的第一种方式:")
        val bigData = List[String]("Hadoop","Spark")  //本质上是调用伴生对象的apply方法
        val data = List[Int](10,20,30,15)
        //声明List的第二种方式:
        println("---------------------")
        println("List的第二种方式:")
        val bigData2 = "Hadoop"::("Spark"::Nil) //List[String]类型
        val data2 = 10::(20::30::15::Nil)    //List[Int]类型
        println(bigData2.head)  //List中的首元素
        println(bigData2.tail)  //List中除第一个元素外其它元素的集合
        println(bigData2.tail.head)  //List中第二部分的首元素
        println("---------------------")
        println(data2.head)
        println(data2.tail)  //输出的是一个集合
        println(data2.tail.head)
        //定义一个空元素的集合
        val arr2 = Nil
        println(arr2.isEmpty)   //判断List列表是否为空
        //声明List的第三种方式:利用模式的匹配
        val List(a,b) = bigData
        println("a:"+a +"b:"+b)
        val List(a2,b2,c,d) = data
        println("__________------------__________")
        println(a2)
        println(b2)
        println(c)
        println(d)
        val x::y::rest = data2
        println("------_______-------")
        println(x)
        println(y)
        println(rest)  //输出一个集合
        //List与模式匹配的结合
        println("模式匹配:")
        def fun(list:Any) = list match
        {
          case x::y::Nil => println("x:"+x+"\t"+"y:"+y)
          case _ => println("nothing")
        }

        fun(List(20,10))
    }  
}

运行结果:

List的第一种方式: ---------------------
List的第二种方式:
Hadoop
List(Spark)
Spark ---------------------
10
List(20, 30, 15)
20
true
a:Hadoopb:Spark
__________------------__________
10
20
30
15
------_______------- 10 20 List(30, 15) 模式匹配: x:20 y:10
2、基于模式匹配的List排序算法实现

1、由于我们可以用模式将List中的内容给提取出来,因此List可以非常方便的与模式匹配进行结合。

实例程序:

object App 
{
     def main(args:Array[String]):Unit=   //main函数的形式参数是一个字符串数组
     {  
        //使用List与模式匹配进行结合来对List进行排序
        val DataShuf = List(6,3,5,50,20,15)
        println(DataShuf)  //List(6, 3, 5, 50, 20, 15)
        println(DataShuf.head)
        println(DataShuf.tail)

        //这个算法我还是没有太懂
        def sortList(list:List[Int]):List[Int] = list match  //注意函数的定义
        {
          case List() => List()
          case head::tail => compute(head,sortList(tail))
        }

        def compute(data:Int,dataSet:List[Int]):List[Int] = dataSet match
        {
          case List() => List(data)
          case head::tail => if(data <= head) data::dataSet 
          else head::compute(data,tail)
        }

        //模式匹配之后的运行结果:
        val aa = sortList(DataShuf)//List(3, 5, 6, 15, 20, 50)   
        println(aa)
     }
}

如有问题,欢迎留言指正!

你可能感兴趣的:(scala,大数据)