大数据系列修炼-Scala课程09
Option使用和实现内幕源码揭晓
1.Option中的sealed关键字解析:Option中用了sealed,定义的case class与case object必须在同一个文件中。Option在模式匹配中匹配项
2.Option使用内幕实战解析:Some表示匹配项,如果没有就在None中找
//sealed 表示封闭式抽象类
sealed abstract class Option[+A] extends Product with Serializable {}
//而some也是继承了Option对象 case class
final case class Some[+A](x: A) extends Option[A] {
def isEmpty = false
def get = x
}
//case object None继承了Option
case object None extends Option[Nothing] {
def isEmpty = true
def get = throw new NoSuchElementException("None.get")
}
val scores = Map("Alice" -> 99, "Spark" -> 100)
scores.get("Alicde") match {
case Some(score) => println(score)
case None => println("No score")
}
List的基本操作实战与基于模式匹配的List排序算法实现
1.List的基本操作:isEmpty(),head,tail,排序
2.基于模式模式的List排序算法实现:用函数的方式排序
//定义两个常量list
val bigData = List("Hadoop" , "Spark")
val data = List(1 , 2 , 3) //::来连接两个list
val bigData_Core = "Hadoop" :: ("Spark" :: Nil)
val data_Int = 1 :: 2 :: 3 :: Nil
//isEmpty()方法判断是否为空
println(data.isEmpty)
//head方法list的第一个元素
println(data.head)
//tail表示除了第一个元素的元素类型为list
println(data.tail.head)
//把第一个赋值给a,第二个赋值给b
val List(a,b) = bigData
println("a : " + a + " === " + " b: " + b)
//把第一个赋值给x,把第二个赋值给y 以后的元素赋值给rest rest为list类型
val x :: y :: rest = data
println("x : " + x + " === " + " y: " + y + " === " + rest ) val shuffledData = List(6,3,5,6,2,9,1)
//sortList排序
println(sortList(shuffledData))
//定义一个sortList排序函数 如果list为空就返回空的list -->否则就list的头元素与后面的list进行比较
def sortList(list : List[Int]): List[Int] = list match{
case List() => List()
case head :: tail => compute (head, sortList(tail))
}
//定义一个函数compute计算 从小到大
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)
}
List中的一阶函数操作实现
1.List中的drop、take、splitAt、apply、indices、tostring、mkstring等实战
2.List的toIterator、toArray、copyToArray实现
//::用于连接两个list的组成新的list
println(List (1,2,3,4) ::: List (4,5,6,7,8) ::: List (10,11))
println(List (1,2,3,4) ::: (List (4,5,6,7,8) ::: List (10,11)))
println(List (1,2,3,4).length) val bigData = List("Hadoop" , "Spark" , "Kaffka")
//last表示最后一个元素
println(bigData.last)
//init除了最后一个的元素
println(bigData.init)
//reverse 表示翻转
println(bigData.reverse)
println(bigData)
//take表示获取前n个元素
println(bigData take 2)
//drop截掉第n个元素
println(bigData drop 1)
//sqlitAt表示在n个元素的地方分割
println(bigData splitAt 2)
//获取序列为n的元素 开始为0
println(bigData apply 2)
//这与apply效果一样
println(bigData(2)) val data=List('a' ,'b', 'c', 'd', 'e', 'f')
//indoces 获取系列号
println(data.indices)
//zip与indices按照序列组合成元素
println(data.indices zip data)
//zipwithIndex zip在前
println(data.zipWithIndex)
//转换为字符串
println(data.toString)
//组合成指定的元素
println(data.mkString ("[", ",,", "]"))
println(data.mkString ("******"))
println(data mkString) //stringbuilder表示可变的元素
val buffer = new StringBuilder
data addString (buffer, "(", ";;", ")")
println(buffer)
println(data)
//list转换为array
val array = data.toArray
println(array.toList)
//转换为char类型的数组
val new_Array = new Array[Char](10)
data.copyToArray(new_Array,3)
new_Array.foreach(print)
println
//转换为迭代器进行遍历
val iterator = data.toIterator
println(iterator.next)
println(iterator.next)
对List进行高效的排序和倒序代码实现
1.对List进行排序实现
2.对List进行倒序排序实现
//定义一个归并排序函数 [T]使用泛型
def mergedsort[T] (less: (T, T) => Boolean) (input: List[T]): List[T] = { /**
* @param xList 要合并的有序列表
* @param yList 要合并的有序列表
* @return 合并后的列表
*/
//基本思想是把list分为两个list进行排序,先把两个list进行排序
def merge(xList: List[T], yList: List[T]): List[T] =
(xList, yList) match {
case (Nil, _) => yList
case (_, Nil) => xList
case (x :: xtail, y :: ytail) =>
if (less(x, y)) x :: merge(xtail, yList)
else y :: merge(xList, ytail)
}
val n = input.length / 2
if (n == 0) input
else {
val (x, y) = input splitAt n //把要排序的列表input平均分成两个列表
merge(mergedsort(less)(x), mergedsort(less)(y)) //先对分后的两个列表归并排序,再对排好的有序表进行归并
}
}
println(mergedsort((x: Int, y: Int) => x < y) (List (3, 7, 9, 5)))
//定义一个倒序的归并排序
val reversed_mergedsort=mergedsort((x: Int, y: Int) => x > y) _
println(reversed_mergedsort(List(3, 7, 9, 5)))
今天主要的内容是关于list的基本操作!明天继续.............
希望大家关注王家林老师的视频微信号(18610086859)
最新地址75讲:http://pan.baidu.com/s/1dDFDRmL
百度云地址31-34讲:http://pan.baidu.com/s/1mgiV7Vq
大数据系列修炼-Scala课程09的更多相关文章
- 大数据系列修炼-Scala课程01
简介 由于本人刚毕业,也是从事软件开发相关的工作.想再学习一下关于大数据.移动互联网.云计算相关的技术.为我的未来打好基础.并且从零开始学习大数据相关的知识,脚踏实地的走好每一步,听行业前辈说毕业生刚 ...
- 大数据系列修炼-Scala课程06
关于Scala中的正则表达式与模式匹配结合的正则表达式Reg 正则表达式的实现:正则表达式的定义与其它语言差不多,只需在表达式后加一个.r,并且可以遍历相应的表达式进行匹配 //定义的正则表达式 va ...
- 大数据系列修炼-Scala课程03
前言 今天上班看了很多关于前端js,jQuery.bootstrap.js以及springMVC看得迷迷糊糊的,毕竟以前很少去学习前端的技术,所有看得有点困,还好看得比较多,回家后也开始学习关于Sca ...
- 大数据系列修炼-Scala课程07
由于昨天下班后有点困,就没有来及写博客,今天会把它补上!把这个习惯坚持下去! 关于Scala高阶函数详解 1.Scala高阶函数代码实现:高阶函数就是在我们函数中套用函数 2.高阶函数代码详解:高阶函 ...
- 大数据系列修炼-Scala课程04
Scala中继承实现:超类的构造.字段重写.方法重写 关于超类的构建:超类可以在子类没有位置的限制,可以在子类中调用父类的方法 类中字段重写:在重写字段前面加一个override就可以重新赋值 类中方 ...
- 大数据系列修炼-Scala课程08
接下来会讲解关于各种模式匹配,从中就会知道模式匹配的重要性 关于Type.Array.List.Tuple模式解析 1.Type模式匹配代码解析 //关于Type类型的模式匹配 //匹配 Int类型. ...
- 大数据系列修炼-Scala课程02
Scala数组操作实战详解 接着昨天的课程,下面我们继续学习关于Scala数组操作详解.Scala数组的定义 //数组定义 //定长数组格式 /** * val arrayName = new Arr ...
- 大数据系列修炼-Scala课程11
接着昨天的list,也是学习集合的相关知识 ListBuffer.ArrayBuffer.Queue.stack相关操作 1.ListBuffer.ArrayBuffer代码实现:ListBuffer ...
- 大数据系列修炼-Scala课程10
今天主要是关于Scala中对List的相关操作,list在Scala中应该是至关重要,接下来会讲解关于List的一系列操作 List的map.flatMap.foreach.filter操作讲解 1. ...
随机推荐
- OpenCV在MFC图像控件内显示图像
1.依照文章<OpenCV+MFC显示图像>,完毕配置. 2.创建对应的图像控件,button控件. 3.进行类型转换. 在当前OpenCV2版本号内,图像格式为cv::Mat ,而该格式 ...
- ListView滑动删除 ,仿腾讯QQ
转载请表明出处:http://blog.csdn.net/lmj623565791/article/details/22961279 在CSDN上开了很多大神们的文章,感觉受益良多,也非常欣赏大家的分 ...
- Shibboleth
1.Shibboleth是一个针对SSO的开源项目.Shibboleth项目主要应用在校园内Web资源共享,以及校园间的应用系统的用户身份联合认证.
- 5月,专用程序猿的经典大作——APUE
五一小长假刚刚过去,收回我们游走的心.開始你们的读书旅程吧! 本期特别推荐 经典UNIX著作最新版. 20多年来,这本书帮助几代程序猿写出强大.高性能.可靠的代码. 第3版依据当今主流系统进行更新,更 ...
- Duanxx的Design abroad: C++矩阵运算库Eigen 概要
一.概要 这两天想起来要做神经网络的作业了,要求用C++完毕神经网络的算法. 摆在面前的第一个问题就是,神经网络算法中大量用到了矩阵运算.可是C++不像matlab那样对矩阵运算有非常好的支持.本来准 ...
- Leetcode - Jump Game Two
和Jump Game几乎相同的想法,他们是DP.关键是使用数组maxNumbers[k]储存的地方k步骤的话.序列号的最远范围,注阵maxNumbers[]它递增. class Solution { ...
- 关于WCF的引用,添加服务和添加web服务的区别
原文:关于WCF的引用,添加服务和添加web服务的区别 本章内容主要是根据我做的实验来阐述这2种添加服务针对WCF的不同之处,我们按照示例一步一步来看. 如下是工程的结构: 该WCF服务是通过控制台程 ...
- 在Linux终端下使用代理访问网络(转)
最近,需要在linux环境下使用脚本进行一些网络访问(主要是HTTP请求与文件下载),于是查阅了一些关于代理的资料. 以下是尝试的几种代理设置方法,以供参考: 一.使用wget命令进行代理访问 wge ...
- Netty In Action中文版 - 第一章:Netty介绍
本章介绍 Netty介绍 为什么要使用non-blocking IO(NIO) 堵塞IO(blocking IO)和非堵塞IO(non-blocking IO)对照 Java NIO的问题和在Nett ...
- 复制(1)——SQLServer 复制简介
原文:复制(1)--SQLServer 复制简介 前言: SQLServer的复制技术最少从SQLServer2000时代已经出现,当初是为了分布式计算,不是为了高可用.但是到了今天,复制也成为了一种 ...