首页 > IT职业 > IT生活 > 大数据入门之Scala学习——基础篇
一、环境搭建
1、启动Scala解释器
(1)安装Scala;
(2)确保scala/bin目录位于系统PATH中;
(3)打开命令行窗口,键入scala并按Enter键。
2、IDE(based on Eclipse IDE)
(1)下载相应版本 IDE;
(2)解压。
在IDE中新建Scala Worksheet(跟REPL类似)。
二、基础
1、变量
(1)三种变量修饰符
val 定义immutable variable(常量);
var 定义 mutable variable(变量);
lazy val(只有当该变量首次被使用的时候才会取值) ;
可以不显示指定变量类型,因为Scala会自动进行类型推导。
2、Scala的类型体系
(1)常用类型:Byte、Char、Short、Int、Long、Float、Double和Boolean。
与Java不同的是,这些类型是类。Scala并不可以区分基本类型和引用类型。
在Scala中,我们用方法来做数值类型之间的转换,99.44.toInt得到99。
3、算术和操作符重载
操作符:+-/%和&|^>>三、控制结构与函数
1、条件表达式
(1)if/else表达式;
如:val s=if(x>0)1 else -1
(2)?:表达式;
如:x>0?1:-1
说明:Scala中没有switch语句,不过它有强大的模式匹配机制。
注意:REPL在同一时间只能看到一行代码。如果想在REPL中粘帖成块代码,可使用粘贴模式,键入:paste。把代码块粘贴进去,然后按Ctrl+D。
2、循环
(1)while循环;
如:while(n>0){ r=r*n n-=1 }
(2)for循环和for推导式
for(i 如:for(i
3、函数
如:
def abs(x:Double)=if(x>=0)x else –x
def fac(n:Int)={
val r=1
for(i 四、数组相关操作
1、定长数组Array 如:
val nums=new ArrayInt //10个整数的数组,初始化为0
val a=new ArrayString //10个元素的字符串数组,初始化为null
val matrix=Array.ofDimDouble //3行4列的二维数组
2、变长数组:数组缓冲ArrayBuffer 如:
import scala.collection.mutable.ArrayBuffer
val b=ArrayBuffer[Int]() //一个空的数组缓冲
b +=1 //用+=在尾端添加元素,ArrayBuffer(1)
b +=(1,2,3,5) //ArrayBuffer(1,1,2,3,5)
b ++=Array(8,13,21) //可用++=在尾端追加任何集合
b.trimEnd(5) //移除最后5个元素, ArrayBuffer(1,1,2)
b.insert(2,7,8,9) //在下标2前面插入7,8,9;ArrayBuffer(1,1,7,8,9,2)
b.remove(2) // 移除下标为2的元素,ArrayBuffer(1,1,8,9,2)
b.remove(2,3) //从下标为2的元素开始移除3个元素,ArrayBuffer(1,1) 3、数组遍历
(1)for(elem println(elem) //其中a为数组名
(2)for(i println(i+”:”+a[i])
注:0 until 10 //Range(0,1,2,3,4,5,6,7,8,9)
若想要每两个一跳,可让i这样遍历
0 until(a.length,2) //Range(0,2,4,.……)
若想要从数组的尾端开始,可让i这样遍历
0 until(a.length) .reverse //Range(.……,2,1,0)
五、映射
1、构造映射
val scores =Map(“Alice” ->10,”Bob” ->3,”Cindy” ->8)
//不可变Map[String,Int]
val scores=scala.collection.mutable.Map(“Alice” ->10,”Bob” ->3,”Cindy” ->8)
//可变Map[String,Int]
val scores=scala.collection.mutable.HashMap[String ,Int]
//空的Map[String,Int] 2、获取映射中的值
val bobScore=scores(“Bob”) //如果映射中不包含Bob键,则会抛出异常 改进后
val bobScore=if(scores.contains(“Bob”)) scores(“Bob”) else 0 该行代码的快捷写法如下:
val bobScore=scores.getOrElse(“Bob”,0) 3、更新映射中的值
假定scores是可变的,
scores(“Bob”)=10 //若Bob键存在,则更新Bob键对应的值;否则添加Bob键值对。
scores +=(“Bob” ->10,”Fred” ->7) //用+=添加多个关系
scores -=”Alice” //用-=移除某个键值对 4、迭代映射
for((k,v) 五、模式匹配
val x=r match{
case ‘0’ =>… //匹配值
case ch if someProperty(ch) => … //守卫
case e:Employee =>… //匹配运行期类型
case (x,y) =>… //使用提取器析构对偶和其他值
case Some(v) =>… //样例类具有提取器功能
case 0 ::tail =>… //提取器的中置表示法产出对偶
case _ => //缺省样例
}
try{ . . . }catch{
case _:MalformedURLException =>println(“Bad URL”)
case ex:IOException =>ex.printStackTrace()
} 来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/2826/viewspace-2799505/ ,如需转载,请注明出处,否则将追究法律责任。