scala总结

原创 2018年04月17日 10:00:44
 --》语言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)

VB + Winsock + CGI 实现 QQ (OICQ) 在线检测

VB + Winsock + CGI 实现 QQ (OICQ) 在线检测(支持代理服务器)!标准 EXE 例程下载http://microinfo.top263.net/Zip/WskQQExe.zi...
  • playyuer
  • playyuer
  • 2001-07-02 15:18:00
  • 1287

Scala总结

Scala总结===概述 scala是一门以java虚拟机(JVM)为目标运行环境并将面向对象和函数式编程的最佳特性结合在一起的静态类型编程语言。scala是纯粹的面向对象的语言。java虽然是面向对...
  • u011225629
  • u011225629
  • 2015-09-07 11:57:11
  • 3030

Scala 基础总结

数据类型 String String 本不算什么基础类型,Scala String 类型有些特点简单介绍几点 字符串插值(String Interpolation) ...
  • u013063153
  • u013063153
  • 2016-11-23 14:10:01
  • 1248

Scala详解--------基础知识详解

Chapter1 1、Scala解释器 启动Scala解释器的方法如下: 自己总结的: 1.打开执行命令栏WIN+R  ,输入cmd,在命令行上输入Scala等待启动如下 ...
  • u011225629
  • u011225629
  • 2015-07-19 20:09:09
  • 1221

Scala知识点整理

scala是一门多范式编程语言(面向对象,函数式编程) 1,scala中定义一个类不用提供对外的set,get方法。 2,伴生对象:一定是object+类名。且在同一文件中。特点:可以访问类中被p...
  • caiyefly
  • caiyefly
  • 2017-09-20 21:53:57
  • 109

scala详细总结

  • 2016年01月29日 14:46
  • 575KB
  • 下载

Scala语言总结概括(代码实例版)

Scala是一门多范式的编程语言,一种类似java的编程语言,设计初衷是实现可伸缩的语言、并集成面向对象编程和函数式编程的各种特性。 Scala 运行在Java虚拟机上,并兼容现有的Java...
  • qq_35488412
  • qq_35488412
  • 2017-03-08 11:31:57
  • 304

Scala练习-排序算法总结

之前用Scala实现了9个排序算法,后续有时间凑个10大。源码已经全部上传到github 冒泡 快排 归并 桶 基数 插入 选择 希尔 堆 其时间复杂度对比如下图(盗图)...
  • qhshiniba
  • qhshiniba
  • 2017-06-30 09:17:54
  • 416

大牛总结的机器学习资料

本文汇编了一些机器学习领域的框架、库以及软件(按编程语言排序)。 C++计算机视觉 CCV —基于C语言/提供缓存/核心的机器视觉库,新颖的机器视觉库 OpenCV—它提供C++, C,...
  • u012170326
  • u012170326
  • 2016-11-09 10:35:20
  • 254

Scala详细总结(精辟版++)

  • 2016年06月27日 01:44
  • 589KB
  • 下载
收藏助手
不良信息举报
您举报文章:scala总结
举报原因:
原因补充:

(最多只允许输入30个字)