Scala-1

var i=0//scala hello.scala 后面加的参数  转换成一个Array[String]
while(i<args.length){
if(i!=0) //第一个String没有空格
print(" ")
print(args(i))//有空格
i+=1
}
println()
args.foreach((arg:String) => println(arg))//forecah() method//正规形式
args.foreach(arg => println(arg))//调用foreach方法 把函数作为参数传入 arg是函数字面量 println(arg)是函数体
args.foreach(prinln(arg))
args.foreach(println)//最简洁的表达
for(arg <- args)//for表达式   
println(arg)
val greetString = new Array[String](3)//val定义的变量不可以被重新赋值 但内部元素可以
greetString(0)="a"
greetString(1)="b"
greetString(2)="c"
for(i<-0 to 2)
println(greetString(i))
val numNames=Array("zero","one","two")//声明数组 
val numNames2=Array.apply("zero","one","two")

列表

val oneTwo=List(1,2)
val threeFour=List(3,4)
val oneTwoThreeFour=oneTwo:::threeFour//合并
val oneTwoThree=1::oneTwo//从右到左 把1合并到左边  twoThree.::(1)

Nil 是空列表的简写

scala> val oneTwoThree=1::2::3::Nil
oneTwoThree: List[Int] = List(1, 2, 3)
//元祖
scala> val pair =(99,"Luftballons")
pair: (Int, String) = (99,Luftballons)
scala> println(pair._1)//._1 元祖第一个元素
99
scala> println(pair._2)//._2 元祖第二个元素  不能用pair(0)访问元祖 
Luftballons
scala> 
scala> var jetSet =Set("BOeing","Airbus") //Set()构造不可变集
jetSet: scala.collection.immutable.Set[String] = Set(BOeing, Airbus)

scala> jetSet+="Lear"//在这里jetSet被重新赋值 可变是通过声明类型var实现的 如果用val声明jetSet是不可更改的

scala> println(jetSet.contains("Cessna"))//.contains()方法
false

scala> println(jetSet.contains("Lear"))
true
scala> import scala.collection.mutable.Set
import scala.collection.mutable.Set

scala> val movieSet=Set("1","2")
movieSet: scala.collection.mutable.Set[String] = Set(1, 2)//如果要使Set类型可变要引入一个scala的集

scala> movieSet+="3"//这里是真正的添加
res8: movieSet.type = Set(3, 1, 2)

scala> import scala.collection.immutable.HashSet
import scala.collection.immutable.HashSet

scala> val hashSet =HashSet("1","2")//使用不可变的HashSet
hashSet: scala.collection.immutable.HashSet[String] = Set(1, 2)

scala> println(hashSet+"COriadnder")
Set(COriadnder, 1, 2)
//使用map构造映射
import  scala.collection.mutable.Map//引入可变的map
scala> val treasureMap=Map[Int,String]()
treasureMap: scala.collection.mutable.Map[Int,String] = Map()

scala> treasureMap+=(1 -> "Go to island.")//加入映射
res10: treasureMap.type = Map(1 -> Go to island.)

scala> treasureMap+=(2 -> "Find big X on ground.")
res11: treasureMap.type = Map(2 -> Find big X on ground., 1 -> Go to island.)

scala> println(treasureMap(1))
Go to island.

scala> val romanNumeral =Map(1->"I",2 ->"II")//如果不引入map 映射集将是不可变的
romanNumeral: scala.collection.immutable.Map[Int,String] = Map(1 -> I, 2 -> II)

scala> romanNumeral +=(3 -> "ee")
<console>:9: error: value += is not a member of scala.collection.immutable.Map[Int,String]
              romanNumeral +=(3 -> "ee")

丢掉var使用函数式风格

val m=Array("a","b","c")
def printArgs(m:Array[String]):Unit={//如果某个函数不返回任何有用的值 也就是说返回类型为Unit 
   m.foreach(println)
  } 
  printArgs(m)

或者

val m=Array("a","b","c")
def printArgs(m:Array[String]):Unit={
 for(arg <- m)
  println(arg)}
printArgs(m)
scala> def formatArgs(args:Array[String]) = args.mkString("\n")
formatArgs: (args: Array[String])String

scala> val m=Array("1","2","3")
m: Array[String] = Array(1, 2, 3)

scala> formatArgs(m)
res0: String =
1
2
3//没有副作用和var的函数 

读取文本文件

import scala.io.Source //调用库
if(args.length>0){  
for(line<- Source.fromFile(args(0)).getLines) //一行一行地读取 args(0)时 运行脚本输入的文件名
 print(line.length+" " +line+"\n")  //输出行
 }
 else 
 Console.err.println("Please enter filename")

在终端运行
scala hello.scala hello.scala

import scala.io.Source
def widthOfLength(s:String) = s.length.toString.length
if(args.length>0){
 val lines =Source.fromFile(args(0)).getLines.toList
 val longestLine=lines.reduceLeft(
 (a,b) => if (a.length > b.length) a else b)
 val maxWidth = widthOfLength(longestLine)
 for(line <- lines)
{
 val numSpaces= maxWidth-widthOfLength(line)
 val padding=" " *numSpaces
 print(padding + line.length+"|" +line+"\n")
 }
 }
posted @ 2016-02-25 14:18  Salaku  阅读(248)  评论(0编辑  收藏  举报