Scala中List的操作
//對於共享相同型別的不可變物件序列,可以使用Scala的List類
//作為一個array,一個list[String]包含為String型別,scala中的list和java中的list不一樣
//scala中的list是不可變得
val oneTwoThree = List(1,2,3) //相當於定義了一個List[Int]的list,裡面的元素為Int型別
println(oneTwoThree + " this is a List")
//列表是不可變的,它們的行為有點像Java字串:當您呼叫一個列表上的方法時,
//該方法的名稱可能暗示該列表將發生變化,但它會建立並返回一個具有新值的新列表。
//例如,List有一個名為:::的方法用於列表連線
val list1 = List(1,2)
val list2 = List(3,4)
val list1AndList2 = list1 ::: list2
println("one list1" + list1 + " and two list2 " + list2)
println("used ::: 連線兩個list:" + list1AndList2)
//也許您將在列表中使用的最常見的操作符是::,它發音為cons。cons將一個新元素放在現有列表的開頭,並返回結果列表
val consBeforeList = List(2,3)
val consAfterList = 1 :: consBeforeList
println("consBeforeList : " + consBeforeList)
println("consAfterList : " + consAfterList)
//這裡不需要使用new List,應為List.apply()被定義在scala.List 這個物件中,是一個工廠方法
//::是一個右運算元的方法
//您可能懷疑:: method的關聯性存在一些問題,
//但它實際上是一個需要記住的簡單規則:如果在運算子表示法中使用了一個方法,
//例如* b,則在左運算元上呼叫該方法,如 在a.*(b)中 - 方法名稱以冒號結尾。
//如果方法名稱以冒號結尾,則在右運算元上呼叫該方法。
//因此,在1 :: consBeforeList中,:: method被呼叫在consBeforeList上,傳入1,就像這樣:consBeforeList. :: (1)
//制定一個空的list是使用nil,一種是建立包含中有的list,用cons操作進行追加一個nil元素到最後
val nilList = 1 :: 2 :: 3 :: Nil
println("this is a nil append last:" + nilList)
//list的所有操作
val createNilList = List()
val createNilListT = Nil //或者建立的時候直接賦值為Nil
println("建立一個空的list:" + createNilList)
//建立有內容的list
val hasContentList = List("tony","hello","shanghai")
println("預設有內容的list:" + hasContentList)
//建立的有內容的另一種方式,已這種後面必須要追加一個Nil
val hasContentList2 = "tony" :: "hello" :: "shanghai" :: Nil
println("建立有內容的list通過::" + hasContentList2)
//將兩個list合併
val listOne = List("one","two")
val listTwo = List("three","four")
val listInner = listOne ::: listTwo
println("通過:::合併兩個list:" + (listOne ::: listTwo))
println("合併後的listInner:" + listInner)
//取出list中相應下標的值,下標從0開始計算
println("取出listOne第二個元素:" + listOne(1))
println("使用count方法(返回元素中陣列長度為4的元素下標+1):" + listInner.count(liststr => liststr.length == 4))
//返回取出N個之後的資料
println("返回取出2個之後的list的元素:" + listInner.drop(2))
//顯示list中list.length-n的元素,就是除去倒數n個元素的list
println("除去倒數n個元素的list:" + listInner.dropRight(2))
//檢查一個元素在list中是否存在,返回false或者true
println("檢查一個元素在list中是否存在:" + listInner.exists(liststr => liststr == "tony"))
//過濾相關的元素
println("過濾相關的元素:" + listInner.filter(liststr => liststr.length == 3))
//檢查list中所有的元素的條件,這裡已結束字元判斷,返回false或者true
println("檢查list中所有的元素的條件,所有元素以o結束:" + listInner.forall(liststr => liststr.endsWith("o")))
//列印所有的list中的元素
listInner.foreach(liststr => print(liststr + " "))
//列印所有的list中的元素的簡寫方式
listInner.foreach(print)
//返回list中的第一個元素
println("返回list中的第一個元素:" + listInner.head)
//返回list中元素,不包括最後一個元素
println("返回list中的所有元素,不包括最後一個:" + listInner.init)
//判斷list是否為空
println("判斷list是否為空:" + listInner.isEmpty)
//返回list中的最後一個元素
println("返回list中最後一個元素:" + listInner.last)
//返回list的長度
println("返回list的長度資訊:" + listInner.length)
//將list中所有的元素的值後面追加一個字元
println("將list中所有的元素的值後面追加一個字元:" + listInner.map(liststr => liststr + "l"))
//將list中元素作為字串返回,並與相關字元拼接
println("將list中元素作為字串返回,並與相關字元拼接:" + listInner.mkString("."))
//list中移除相關的元素
println("listInner:" + listInner)
// val listRemove = listInner.remove(liststr => liststr.length == 4)
// println("list中移除相關的元素:" + listRemove)
//這裡的remove會報錯,在當前這個版本已經一處掉了,自從2.9.0之後,現在我們使用filterNot這個
println("list中移除相關的元素:" + listInner.filterNot(liststr => liststr.length == 4))
//將list中的元素進行翻轉
println("將list中的元素進行翻轉:" + listInner.reverse)
//將list中的元素進行排序,sort在我當前這個版本已經移除了,自從2.9.0之後,變為了sortWith
// val sortList = listInner.sort((str,t) => str.charAt(0).toLower < t.charAt(0).toLower)
// println("將list中的元素進行排序之後的list:" + sortList)
val sortList = listInner.sortWith((str,t) => str.charAt(0).toLower < t.charAt(0).toLower)
println("將list中的元素進行排序之後的list:" + sortList)
//顯示list中的所有的元素,減去第一個
println("顯示list中的所有的元素,減去第一個:" + listInner.tail)