scala總結

 --》語言api說明文檔
--》不用庫
最根本的類Any
--》scala經常使用庫
scala.collection.mutable.Map(裏面有zip)
--》運行腳本
scala分爲腳本和程序

運行scala腳本用  scala 文件名.scala
--》一般Unit只用來聲明函數或方法的返回值,其餘場景基本是沒有意義的
--》刪除scala sudo apt-get remove scala
-->安裝scala
1.在 http://www.scala-lang.org/download/2.11.8.html下載tar格式的文件(不是源代碼,是編譯好的)
2.複製到home文件夾
3.tar -xzvf scala-2.11.8
4.sudo gedit /etc/profile 在其中添加
export SCALA_HOME=/home/zhaodezan/scala-2.11.8
export PATH=$SCALA_HOME/bin:$PATH
5.source /etc/profile
6.驗證 scala -version
   總結:安裝步驟爲:下載編譯好的文件並解壓,添加環境變量,驗證
--》scala hello world程序
1.在myproject下建立src/org/examples文件夾
2.在其下建立Hello.scala文件,源代碼爲
package org.example
object Hello{
def main(args:Array[String]){   //固定模式,能夠背下來
println("hello,world") //必須用雙引號,複製時必須去掉註釋,不然報錯
}
}
3.在src文件夾下執行 
scalac org/examples/Hello.scala
scala  org.examples.Hello
         1)先scalac再scala 2)scala將生成package包名命名的文件夾3)scala 文件名.類名(類名沒有.class後綴)
--》循環for命令
1.建立keshan.scala文件
2.書寫代碼
object Test{
        def main(args:Array[String]){
                for(arg<-args)
                        {
                                println(arg)
                        }
        }
}
3.編譯scalac keshan.scala
4.運行scala  Test zhao de zan
--》scala數組
>val greetStrings = new Array[String](3) //建立一個長度爲3的字符串數組
greetStrings: Array[String] = Array(null, null, null)
>greetStrings(0)="Hello"
>greetStrings(1)=","
>greetStrings(2)="world!\n"
>for(i<-0 to 2){print(greetStrings(i))}
將輸出 Hello,world!
--》scala二維數組
scala> val matrix = Array.ofDim[Int](2,3) //構建二維數組
matrix: Array[Array[Int]] = Array(Array(0, 0, 0), Array(0, 0, 0)) 
scala> matrix(1)(1)=5                                                  //數組元素的引用
scala> println(matrix(1)(1))
5
--》數組的長度length
scala> val a = Array(1,3,4)
a: Array[Int] = Array(1, 3, 4)

scala> a.length
res0: Int = 3

scala> val b = Array(5,6,7)
b: Array[Int] = Array(5, 6, 7)

scala> b.length
res1: Int = 3

scala> val c = a.zip(b)
c: Array[(Int, Int)] = Array((1,5), (3,6), (4,7))

scala> c.length
res2: Int = 3

--》打印二維數組所有
scala> val a = Array(Array(1,2,3),Array(4,5,6))
a: Array[Array[Int]] = Array(Array(1, 2, 3), Array(4, 5, 6))
scala> val b = sc.parallelize(a)
b: org.apache.spark.rdd.RDD[Array[Int]] = ParallelCollectionRDD[2] at parallelize at <console>:23
scala> b.foreach(x=>(x.foreach(i=>println(i))))
--》數組形式打印二維數組
scala> var a = Array(Array(1,2),Array(4,5))
a: Array[Array[Int]] = Array(Array(1, 2), Array(4, 5))
scala> a.foreach(one=>{println(one.mkString(" "))})
1 2
4 5
--》foreach的_用法
scala> val a = Array(1,2,3)
a: Array[Int] = Array(1, 2, 3)
scala> a.foreach(_=>println(a(2)))
3
3
3


--》類,沒有構造函數,自動運行裏面的指令了
>class A{print("hello,world\n")}
defined class A
>val a = new A
hello,world
a: A = A@1c1159ee
--》程序休眠
Thread.sleep(1000000)
--》var和val的區別
var和java的變量相同,初始化以後還能夠繼續複製
val初始化以後就再也不能夠賦值了
>var a=1
>a=8
上述句子能夠
>val a=2
>a=4
將報錯error: reassignment to val
--》類變量的全局性
scala> class A{
     |   val a=new Array[Int](1)
     |   fun(a)
     |   println(a(0))
     |   def fun(b:Array[Int]){
     |    b(0)=1
     |   }
     | }
defined class A

scala> val b = new A
1
b: A = A@50530c6d

注意,若將println(a(0))改成println(a)
則會打印
scala> val b  =new A
[I@7067ba82
b: A = A@2a05e675
只是打印的資源的位置

--》對象成員的引用
scala> b.a
res1: Array[Int] = Array(1)

scala> b.a(0)
res2: Int = 1

scala> b.a(1)
java.lang.ArrayIndexOutOfBoundsException: 1
  ... 33 elided
--》scala shell中要多行打印,
則在輸入下一行的時候按回車鍵便可
結束輸入,則按esc鍵,再按回車鍵
--》zip
scala> List(1,2,3).zip(List("a","b","c"))
res0: List[(Int, String)] = List((1,a), (2,b), (3,c))
將兩個列表的元素合成一個由元素對組成的列表中

scala> val a = Array(1,2,3,4,5)
a: Array[Int] = Array(1, 2, 3, 4, 5)
scala> val b = Array(6,7,8,9,10)
b: Array[Int] = Array(6, 7, 8, 9, 10)
scala> val c = a.zip(b)
c: Array[(Int, Int)] = Array((1,6), (2,7), (3,8), (4,9), (5,10))
將兩個數組合在一塊兒


將一個二維數組和一個一維數組綁定在一塊兒,用於將訓練集等的綁定
scala> val a = new Array[Array[Float]](2)
a: Array[Array[Float]] = Array(null, null)
scala> a(0) = Array(1,2,3,4,5)
scala> a
res6: Array[Array[Float]] = Array(Array(1.0, 2.0, 3.0, 4.0, 5.0), null)
scala> val b = Array(6)
b: Array[Int] = Array(6)
scala> a.zip(b)
res7: Array[(Array[Float], Int)] = Array((Array(1.0, 2.0, 3.0, 4.0, 5.0),6))


--》基本集合類List
scala> val numbers = List(1,2,3,4)
numbers: List[Int] = List(1, 2, 3, 4)
--》函數組合器,map將一個集合映射map到另外一個集合
--》string類型轉換爲Float類型
scala> val a ="12.23".toFloat
a: Float = 12.23
scala> numbers.map((i:Int)=>i*2)
res3: List[Int] = List(2, 4, 6, 8)
--》集合類的foreach方法用於遍歷,不改變集合的值
scala> val num = List(1,2,3,4)
num: List[Int] = List(1, 2, 3, 4)

scala> num.foreach((x:Int)=>println(x*2))
2
4
6
8
--》基本集合類Set
scala> Set(1,1,2)
res1: scala.collection.immutable.Set[Int] = Set(1, 2)
--》println
直接打印字符串,注意必須是雙引號,必須是括號
>println("hello,world")
--》println直接打印列表
scala> val a = List(1,2,3,4)
a: List[Int] = List(1, 2, 3, 4)

scala> println(a)
List(1, 2, 3, 4)
--》println間接打印數組
scala> val a= Array(1,2,3,4)
a: Array[Int] = Array(1, 2, 3, 4)

scala> println(a)
[I@79675800

scala> a.foreach((x:Int)=>println(x))
1
2
3
--》
scala> Array.range(0,4)
res8: Array[Int] = Array(0, 1, 2, 3)
--》打印亂碼
scala> val a = Array(1,2,3)
a: Array[Int] = Array(1, 2, 3)
scala> println(a)
[I@5f33f2f3
scala> a.foreach(x=>println(x))
1
2
3
--》scalatest 測試程序,參考連接 http://www.scalatest.org/quick_start
注意事項,將jar和scala程序放到同一個目錄下
--》用scala調用java的庫,並調用啓動python的腳本
在Hello.scala中輸入以下程序
import java.io.BufferedReader
import java.io.InputStreamReader
object Hello{
def main(args:Array[String]){
val pr = Runtime.getRuntime().exec("python test.py")
            val in = new BufferedReader(new InputStreamReader(pr.getInputStream()))  
            var line = in.readLine
while (line != null) {
System.out.println("line is")
                System.out.println(line+2)
line = in.readLine
            }  
            in.close()
            pr.waitFor()
            System.out.println("end")
println("hello,world")
}
}
創建test.py文件並複製以下數據
import sys


import matplotlib.pyplot as plt
import numpy as np
import scipy.io as sio
import argparse
import dlib
from skimage import io

def run_dlib_selective_search(image_name):
    img = io.imread(image_name)
    rects = []
    dlib.find_candidate_object_locations(img,rects,min_size=50)
    proposals = []
    for k,d in enumerate(rects):
        templist = [d.left(),d.top(),d.right(),d.bottom()]
        proposals.append(templist)
    proposals = np.array(proposals)
    return proposals


if __name__ == '__main__':
obj_proposals = run_dlib_selective_search("/home/zhaodz/program/fast-rcnn/data/demo/000004.jpg")
print obj_proposals


輸入scalac Hello.scala
輸入scala  Hello
--》用Scala讀入文件
import scala.io.Source
val lines = Source.fromFile("/home/zhaodz/tmp/dd.txt")
--》讀取文件(使用了java的函數)
import java.io.BufferedReader;
import java.io.FileReader;
object Hello{
def main(args:Array[String]){  
var fr=new FileReader("dd.txt")
var br = new BufferedReader(fr)
var s = br.readLine()
while(s!=null){
println(s)
s = br.readLine()
}
}
}
--》替換(接上面程序)
var ss = s.replace("1","2") //將1替換爲2,若2改成"",則表示刪除1這個字符串
println(ss)
--》定義一個List
scala> val nums = List(1,2,3,4,5)
scala> nums.slice(2,4)
res20: List[Int] = List(3, 4)
--》定義一個空的List
var result = List[Int]()
--》在List前面增長一個數
scala> val when = "AM" :: "PM" :: List()
when: List[String] = List(AM, PM)
scala> val when = "AM" :: "PM" ::days
when: List[String] = List(AM, PM, Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday)
--》在List後面增長一個數
scala> result.::(2)
res24: List[Int] = List(2)
注意有.  不然報錯

--》定義迭代器
scala> val a = Iterator("baidu","google","sougou")
a: Iterator[String] = non-empty iterator
--》打印迭代器
scala> while(a.hasNext){println(a.next())}
baidu
google
sougou
--》列表轉化爲迭代器
scala> val a = List(1,2,3)
a: List[Int] = List(1, 2, 3)
scala> val b = a.iterator
b: Iterator[Int] = non-empty iterator
scala> while(b.hasNext){println(b.next())}
1
2
3

--》隨機數
scala> import scala.util.Random
scala> val a = new Random()
scala> a.nextInt(20)//0-19 包括19
res10: Int = 14
-->映射
--》構建映射
scala> val scores = Map("Alice"->10,"Blob"->3,"Cindy"->8)
scores: scala.collection.immutable.Map[String,Int] = Map(Alice -> 10, Blob -> 3, Cindy -> 8)
--》獲取映射中的值
scala> scores("Blob")
res30: Int = 3

也能夠用java的代碼
scala> scores.get("Blob")
res31: Option[Int] = Some(3)
相關文章
相關標籤/搜索