Scala数组操作实战详解

接着昨天的课程,下面我们继续学习关于Scala数组操作详解。
Scala数组的定义

//数组定义
//定长数组格式
/**
* val arrayName = new Array[datatype](length)
* val arrayName = Array(constant1,constant2,....)
*/
//不定长数组定义格式
/*
* var arrayBufferName =ArrayBuffer[datatype]()
*/

数组的基本操作:包括截取(trimEnd),插入(insert),移除(remove),转换(toArray)等函数,居然发现eclipse开发工具中有一个很好的调试工具能够查看更多的变量值Scala Worksheet 非常好用!希望大家用用!

val b =ArrayBuffer[Int]()                      //> b  : scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer()
b += 5 //> res0: com.dt.zhangsh.scala.ArrrayOp.b.type = ArrayBuffer(5)
b //> res1: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(5)
b += (1,2,78,2) //> res2: com.dt.zhangsh.scala.ArrrayOp.b.type = ArrayBuffer(5, 1, 2, 78, 2)
b ++= Array(45,2,1) //> res3: com.dt.zhangsh.scala.ArrrayOp.b.type = ArrayBuffer(5, 1, 2, 78, 2, 45,
//| 2, 1)
b.trimEnd(5)
b //> res4: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(5, 1, 2)
b.insert(2, 6)
b //> res5: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(5, 1, 6, 2)
b.insert(2, 7, 8, 9)
b //> res6: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(5, 1, 7, 8, 9,
//| 6, 2)
b.remove(2) //> res7: Int = 7
b //> res8: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(5, 1, 8, 9, 6,
//| 2)
b.remove(2, 3)
b //> res9: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(5, 1, 2)
b.toArray //> res10: Array[Int] = Array(5, 1, 2)

数组的进阶操作:进阶包括:求倍数(map)、求和(sum)、最大值(max)、排序(sorted)、快速排序(quickSort)、拼接(mkString)等函数

   //数组进阶
val c = Array(2, 3, 5, 7, 11) //> c : Array[Int] = Array(2, 3, 5, 7, 11)
//数组乘以5 必须包含yield 用于结果输出
val result = for (elem <- c) yield 5 * elem //> result : Array[Int] = Array(10, 15, 25, 35, 55)
result //> res11: Array[Int] = Array(10, 15, 25, 35, 55)
//
for (elem <- c if elem % 2 == 0) yield 2 * elem
//> res12: Array[Int] = Array(4)
//_为占位符 如果能被2余数为0的数据放到map中并且乘以2
c.filter(_ % 2 == 0).map(2 * _) //> res13: Array[Int] = Array(4)
c //> res14: Array[Int] = Array(2, 3, 5, 7, 11)
//求和
Array(1, 7, 2, 9).sum //> res15: Int = 19
//字符串最长
ArrayBuffer("Mary", "had", "a", "little", "lamb").max
//> res16: String = little val d = ArrayBuffer(1, 7, 2, 9) //> d : scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(1, 7, 2, 9)
//排序
val bSorted = d.sorted //> bSorted : scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(1, 2, 7,
//| 9) val e = Array(1, 7, 2, 9) //> e : Array[Int] = Array(1, 7, 2, 9)
//快速排序
scala.util.Sorting.quickSort(e)
e //> res17: Array[Int] = Array(1, 2, 7, 9)
//拼接
e.mkString(" and ") //> res18: String = 1 and 2 and 7 and 9
e.mkString("<", ",", ">") //> res19: String = <1,2,7,9>

多维数组定义:在一维数组的基础添加多维数组,数组中包含数组

    //多维数组
//数组中添加一维数组
val matrix = Array.ofDim[Double](3, 4)
//> matrix : Array[Array[Double]] = Array(Array(0.0, 0.0, 0.0, 0.0), Array(0.0
//| , 0.0, 0.0, 0.0), Array(0.0, 0.0, 0.0, 0.0))
matrix(2)(1) = 110
matrix //> res20: Array[Array[Double]] = Array(Array(0.0, 0.0, 0.0, 0.0), Array(0.0, 0
//| .0, 0.0, 0.0), Array(0.0, 110.0, 0.0, 0.0)) val triangle = new Array[Array[Int]](10) //> triangle : Array[Array[Int]] = Array(null, null, null, null, null, null, n
//| ull, null, null, null)
for (i <- 0 until triangle.length)
triangle(i) = new Array[Int](i + 1)
triangle //> res21: Array[Array[Int]] = Array(Array(0), Array(0, 0), Array(0, 0, 0), Arr
//| ay(0, 0, 0, 0), Array(0, 0, 0, 0, 0), Array(0, 0, 0, 0, 0, 0), Array(0, 0,
//| 0, 0, 0, 0, 0), Array(0, 0, 0, 0, 0, 0, 0, 0), Array(0, 0, 0, 0, 0, 0, 0, 0
//| , 0), Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0))

Map、Tuple、Zip实战解析

Map实战:主要包括Map不可变(immutable)、Map可变(mutable)、getOrElse方法、map的真删改、排序等

  //map 不可变
val map = Map("book"->10,"gun"->18,"ipad"->1000)//> map : scala.collection.immutable.Map[String,Int] = Map(book -> 10, gun -> 1
//| 8, ipad -> 1000)
for((k,v) <- map) yield (k,v * 0.9) //> res0: scala.collection.immutable.Map[String,Double] = Map(book -> 9.0, gun -
//| > 16.2, ipad -> 900.0)
//Map 可变
val scores = scala.collection.mutable.Map("Scala" -> 7, "Hadoop" -> 8, "Spark" -> 10 )
//> scores : scala.collection.mutable.Map[String,Int] = Map(Hadoop -> 8, Spark
//| -> 10, Scala -> 7)
//Map中getOrElse方法判断是否有key,如果flase就为后面value
val hadoopScore = scores.getOrElse("Hadoop", 0) //> hadoopScore : Int = 8
//向Map中添加数值
scores += ("R" -> 9) //> res1: com.dt.zhangsh.scala.ScalaOpWorkSheet.scores.type = Map(Hadoop -> 8, R
//| -> 9, Spark -> 10, Scala -> 7)
//删除
scores -= "Hadoop" //> res2: com.dt.zhangsh.scala.ScalaOpWorkSheet.scores.type = Map(R -> 9, Spark
//| -> 10, Scala -> 7)
//排序
val sortedScore = scala.collection.immutable.SortedMap("Scala" -> 7, "Hadoop" -> 8, "Spark" -> 10 )
//> sortedScore : scala.collection.immutable.SortedMap[String,Int] = Map(Hadoop
//| -> 8, Scala -> 7, Spark -> 10)

Tuple实战:tuple最主要是自动识别变量类型,遍历时从1开始,可以用空格或者点加占位符进行数据访问,截取大写字母后拼接以及获得tuple中的部分数据,不需要的用占位符代替

   //tuple主要是能够自动识别变量类型,自己查看类型
val tuple =(1,2,3.14,"Rocky","Spark") //> tuple : (Int, Int, Double, String, String) = (1,2,3.14,Rocky,Spark)
//遍历时从1开始,可以是空格或者加占位符序列进行访问
val third = tuple._3 //> third : Double = 3.14
//可以把tuple给一变量,如果只需一部分,其他的用占位符代替
val (first,second,thirda,fourth,fifth) = tuple //> first : Int = 1
//| second : Int = 2
//| thirda : Double = 3.14
//| fourth : String = Rocky
//| fifth : String = Spark
val (f, s, _, _, _) = tuple //> f : Int = 1
//| s : Int = 2
//截取大写字母后拼接
"Scala Spark".partition(_.isUpper) //> res3: (String, String) = (SS,cala park)

Zip操作实战:按照两个数组的序列进行匹配组成心得元素

//Zip实战:包括按照序列进行匹配为元素
val symbols = Array("[", "-", "]") //> symbols : Array[String] = Array([, -, ])
val counts = Array(2,5,2) //> counts : Array[Int] = Array(2, 5, 2)
val pairs = symbols.zip(counts) //> pairs : Array[(String, Int)] = Array(([,2), (-,5), (],2)) for ((x,y) <- pairs) println(x*y) //> [[
//| -----
//| ]]

Scala类的属性和对象私有字段实战详解

Scala类的使用实战:Scala类中变量必须赋值并且方法变量的时候用的还方法访问(def b_)
getter与setter实战:getter与setter方法只有是普通变量就行了
对象私有属性实战:使用private修饰的变量可以getter,没有setter,private[this]只能在本类中使用

class People {
//定义的变量 必须赋值,只有不为private变量,它就用于setter和getter方法
var age =0
def increment() {age +=1}
def current = age
} class Student{
//私有的变量只有getter方法没有setter方法
private var privateAge = 0
//private[this]修饰的变量只能当前类使用
private[this] val name = "Scala"
def age = privateAge def isYounger(other: Student) = privateAge < other.privateAge
} object HelloOOP{
def main(args: Array[String]): Unit = {
val people=new People
people.age =10
// people.increment()
// people.increment()
// println(people.current)
//
// val student = new Student
// //student.age=10//私有的不能设置值
// println(student.age) // val student = new Student
// println(student.name)
}
}

Scala主构造器、私有构造器、构造器重载实战详解

Scala主构造器实战:Scala类中可以添加参数的,主构造器就是默认的构造器

私有构造器实战 :主构造器重构必须集成主构造器!

构造器重载实战:如果Scala类是私有的,者不能被实例化,只有重构构造器才能使用

object ScalaOOP {
def main(args: Array[String]): Unit = { // val p = new Teacher
// p.name = "Spark"
//
// p.sayHello
// val p = new Teacher("Spark", 5)
// println(" : " + p.age)
val p = new Teacher("Spark", 5 , "male")
println(" : " + p.age)
}
}
//class Teacher {
// var name : String = _
// private var age = 27
// private[this] val gender = "male"
//
// def this(name:String){
// this
// this.name = name
// }
//
// def sayHello(){
// println(this.name + ":" + this.age + " : " + this.gender)
// }
//}
//如果Scala类是私有的,者不能被实例化,只有重构构造器才能使用
class Teacher private (val name : String, val age : Int){
println("This is the primary constructor!!!")
var gender : String = _
println(gender)
def this(name : String, age : Int, gender : String){
this(name, age) this.gender = gender
}
}

未完待续。。。。。

大数据系列修炼-Scala课程02的更多相关文章

  1. 大数据系列修炼-Scala课程01

    简介 由于本人刚毕业,也是从事软件开发相关的工作.想再学习一下关于大数据.移动互联网.云计算相关的技术.为我的未来打好基础.并且从零开始学习大数据相关的知识,脚踏实地的走好每一步,听行业前辈说毕业生刚 ...

  2. 大数据系列修炼-Scala课程03

    前言 今天上班看了很多关于前端js,jQuery.bootstrap.js以及springMVC看得迷迷糊糊的,毕竟以前很少去学习前端的技术,所有看得有点困,还好看得比较多,回家后也开始学习关于Sca ...

  3. 大数据系列修炼-Scala课程07

    由于昨天下班后有点困,就没有来及写博客,今天会把它补上!把这个习惯坚持下去! 关于Scala高阶函数详解 1.Scala高阶函数代码实现:高阶函数就是在我们函数中套用函数 2.高阶函数代码详解:高阶函 ...

  4. 大数据系列修炼-Scala课程06

    关于Scala中的正则表达式与模式匹配结合的正则表达式Reg 正则表达式的实现:正则表达式的定义与其它语言差不多,只需在表达式后加一个.r,并且可以遍历相应的表达式进行匹配 //定义的正则表达式 va ...

  5. 大数据系列修炼-Scala课程04

    Scala中继承实现:超类的构造.字段重写.方法重写 关于超类的构建:超类可以在子类没有位置的限制,可以在子类中调用父类的方法 类中字段重写:在重写字段前面加一个override就可以重新赋值 类中方 ...

  6. 大数据系列修炼-Scala课程08

    接下来会讲解关于各种模式匹配,从中就会知道模式匹配的重要性 关于Type.Array.List.Tuple模式解析 1.Type模式匹配代码解析 //关于Type类型的模式匹配 //匹配 Int类型. ...

  7. 大数据系列修炼-Scala课程11

    接着昨天的list,也是学习集合的相关知识 ListBuffer.ArrayBuffer.Queue.stack相关操作 1.ListBuffer.ArrayBuffer代码实现:ListBuffer ...

  8. 大数据系列修炼-Scala课程10

    今天主要是关于Scala中对List的相关操作,list在Scala中应该是至关重要,接下来会讲解关于List的一系列操作 List的map.flatMap.foreach.filter操作讲解 1. ...

  9. 大数据系列修炼-Scala课程05

    Scala多重继承.构造器的执行顺序.AOP实现 多重继承的trait实现:Scala中接口可以继承具体的类,trait接口可以实现多重继承,并且某个类也可以继承特定的类,在继承后面可以混入,接口的实 ...

随机推荐

  1. POJ 2586:Y2K Accounting Bug(贪心)

    Y2K Accounting Bug Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 10024 Accepted: 4990 D ...

  2. PIC16SCM设置不同IO功耗端口状态的影响

    最近做的PIC低功耗微控制器,因此,要设置不同的IO端口状态有关电源的情况测试,在系列万用表的方法来测量电流,供应链管理IO港是在地狱,无头整个系统驱动器.的是PIC16F690单片机. 思路例如以下 ...

  3. 乐在其中设计模式(C#) - 策略模式(Strategy Pattern)

    原文:乐在其中设计模式(C#) - 策略模式(Strategy Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 策略模式(Strategy Pattern) 作者:webabc ...

  4. c# 通过配置自动附加数据库

    using System; using System.Collections.Generic; using System.Windows.Forms; using System.Data.SqlCli ...

  5. Cocos2d-x学习笔记(9)(CCTextFieldTTF使用输入框)

    1.CCTextFieldTTF创建和使用 CCTextFieldTTF::create(const char* placeholder,const char* fontName.float font ...

  6. 【Web探索之旅】第二部分第五课:响应式网站和移动应用

    内容简介 1.第二部分第五课:响应式网站和移动应用 2.第三部分第一课预告:服务器 第二部分第五课:响应式网站和移动应用 在我们开始聊响应式网站之前,我们可以聊聊移动App(App是Applicati ...

  7. 【C语言探索之旅】 第二部分第一课:模块化编程

    内容简介 1.课程大纲 2.第二部分第一课: 模块化编程 3.第二部分第二课预告: 进击的指针,C语言王牌 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会公布答案.还会带大家用C ...

  8. OpenNMS在安装”我找不到jrrd.dll“错误的解决方法

    在Windows 2003 Server(虚拟机)安装OpenNMS.找不到jrrd.dll错误.尝试从学习OpenNMS官网下载jrrd-1.0.7.tar.gz,我们没有发现标dll文件,编译需要 ...

  9. WPF学习(5)依赖属性

    今天我们来学习WPF一个比较重要的概念:依赖属性.这里推荐大家看看周永恒大哥的文章,讲的确实很不错.我理解的没那么深入,只能发表一下自己的浅见.提到依赖属性,不得不说我们经常使用的传统的.net属性, ...

  10. Path和ClassPath差异

    1.Path角色 Path它用于指定Java路径的命令,当我们想编译Java当需要使用的程序javac.exe并运行.class当文件需要使用java.exe,此时Path设置的路径就发生作用了.由于 ...