Scala学习笔记 -- 入门(二)

7.参数化

//值参数化
val big = new java.math.BigInteger("12345")

//类型参数化
val greetStrings = new Array[String](3)
greetStrings(0) = "Hello"
greetStrings(1) = ", "
greetStrings(2) = "world!\n"
for (i <- 0 to 2)
    println(greetStrings(i))
//apply方法调用
val res = 1 + 2
val res = (1).+(2)

//update方法调用
greetStrings(0) = "Hello"
greetStrings.update(0, "Hello")

8.列表

//创建初始化一个列表
val oneTwoThree = List(1, 2, 3)

//列表拼接
val oneTwo = List(1, 2)
val twoThree = List(2, 3)
val threeFour = List(3, 4)
val oneTwoThreeFour = oneTwo ::: threeFour

val oneTwoThree = 1 :: twoThree
// twoThree.::(1)

val oneTwoThree = 1 :: 2 :: 3 ::Nil

9.元组

val pair = (99, "Luftballons")
println(pair._1)
println(pair._2)

10.集与映射

Scala提供了两个子特质,一个用于表示可变集,一个用于表示不可变集。

// 创建、初始化及使用不可变集
var jetSet = Set("Boeing", "Airbus")
jetSet += "Lear"
println(jetSet.contains("Cessna"))

//创建、初始化及使用可变集
import scala.collection.mutable
val movieSet = mutable.Set("Hitch" ,"Poltergeist")
movieSet += "Shrek"
println(movieSet)
//创建 初始化及使用一个不可变HashSet
import scala.collection.immutable.HashSet
val hashSet = HashSet("Tomatoes" ,"Chilies")
println(hashSet + "Coriander")

//创建 初始化及使用一个可变映射
import scala.collection.mutable
val treasureMap = mutable.Map[Int, String]
treasureMap += (1 -> "Go to island.")
treasureMap += (2 -> "Find big X on ground.")
treasureMap += (3 -> "Dig.")
println(treasureMap(2))
def formatArgs(args:Array[String]) = args.mkString("\n")
val res = formatArgs(Array("zero", "one", "two"))
assert(res == "zero\none\ntwo")

11.文件操作

//引入scala.io包中Source类
import scala.io.Source
def widthOfLength(s:String) = s.length.toString.length
if(args.length > 0){
    /*
    toList是必需的,因为getLines()方法返回的是一个迭代器iteration,一旦完成遍历,迭代器就会被消耗掉。通过toList将它转化为List,即可通过内存存储所有行。
    */
    val lines=Source.fromFile(args(0)).getLines().toList
    /*
    reduceLeft方法将传入的函数应用到lines的头两个元素,然后继续将这个传入的函数应用到前一步得到的值和lines中的下一个元素,直到遍历完整个列表后,reduceLeft将返回传入函数的最后一次执行结果。
    */
    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
        println(padding + line.length + " | " + line)
    }
}
else
Console.err.println("Please enter filename: ")
12-21 12:50