參考文獻(xiàn):《快學(xué)Scala》第13章
package learn
import breeze.numerics.pow
import scala.collection.mutable.LinkedList
/**
* Created by wjf on 2016/8/14.
*/
object TestList {
def main(args: Array[String]): Unit = {
/*
* 在Scala 中圾笨,列表要么是Nil盗舰,要么是一個(gè)head元素加一個(gè)tail,而tail有事一個(gè)列表*/
val digits = List(4, 2)
digits.head //4
digits.tail // List(2)
digits.tail.head //2
digits.tail.tail // Nil
// :: 操作符從給定的頭和尾創(chuàng)見一個(gè)新的列表
9 :: List(3, 1)
9 :: 3 :: 1 :: Nil
// 計(jì)算求和 ,模式匹配版本
def sum(lst: List[Int]): Int = lst match {
case Nil => 0
case h :: t => h + sum(t)
}
// 遞歸版,遞歸之所以那么自然辅鲸,是因?yàn)榱斜淼奈膊空糜质且粋€(gè)列表
def sum2(lst: List[Int]): Int = {
if (lst == Nil) 0
else lst.head + sum(lst.tail)
}
// 可變列表
val lst = LinkedList(1, -2, -3)
var cru = lst
while (cru != Nil) {
if (cru.elem < 0) cru.elem = 0
cru = cru.next
}
// 各一個(gè)元素刪除一個(gè)元素
while (cru != Nil && cru.next != Nil) {
cru.next = cru.next.next
cru = cru.next
}
println(lst.elem)
// lst.next=Nil
lst.next = LinkedList.empty
println(lst.elem)
println(lst.next.elem)
// flatMap 將結(jié)果串接在一起
val s = List("wjf", "csm")
def ulcase(t: String) = Vector(t.toUpperCase(), t.toLowerCase())
s.map(ulcase).foreach(println)
s.flatMap(ulcase).foreach(println)
// colect 方法用于偏函數(shù),那些并沒有對所有可能輸入值進(jìn)行定義的函數(shù)仅财,它產(chǎn)出的所有參數(shù)的函數(shù)值的集合棚饵,例如
"-3+4".collect { case '+' => 1; case '-' => -1 }.foreach(println)
// scanLeft scanRight
(1 to 10).scanLeft(0)(_ + _).foreach(println)
//拉鏈操作 zip 得到一個(gè)對偶
val prices = List(1, 2, 3)
val quantities = List(1, 2, 3)
prices zip quantities map (p => p._1 * p._2) foreach (println)
// zipALl 制定缺省值
List(1, 2, 3) zipAll(List(1, 2), 0.0, 1) foreach (println)
// 懶視圖,應(yīng)用view 方法來得到類似的效果亮钦,該方法產(chǎn)生一個(gè)方法總是被懶執(zhí)行的集合 }
val powers = (0 until 1000).view.map(pow(10, _)) // 將產(chǎn)生一個(gè)未被求值得集合馆截,
// 當(dāng)你計(jì)算 pow(10,100)時(shí),其他值得冪并沒有被計(jì)算蜂莉,和流不同蜡娶,這些視圖并不會(huì)緩存任何值,
// 懶集合的好處映穗,看下面的例子
// (0 to 1000).map(pow(10, _)).map(1 / _)
//(0 to 1000).view.map(pow(10, _)).map(1 / _).force
// 第二個(gè)例子窖张,當(dāng)求知?jiǎng)幼鞅粡?qiáng)制執(zhí)行時(shí),對于每個(gè)元素蚁滋,這兩個(gè)操作被同時(shí)執(zhí)行宿接,不需要額外的中間集合
// 流 對象
def numsFrom(n: BigInt): Stream[BigInt] = n #:: numsFrom(n + 1)
val tenOrMore = numsFrom(10)
// tenOrMore.force
println(tenOrMore)
// 并行集合,Scala 提供了用于操縱大型集合任務(wù)的誘人的解決方案辕录,這些任務(wù)通衬丽可以很自然的并行操作。
// 舉例來講:要計(jì)算所有元素只和走诞,多個(gè)線程可以并發(fā)的計(jì)算不通區(qū)域的和副女;在最后,把結(jié)果匯總起來
for( i <-( 0 until 100).par) print( i + " ")
var array=for(i <- (0 until 100).par) yield i + " "
array.foreach(println)
}
}