當前位置:
首頁 > 最新 > 有趣的Scala列表

有趣的Scala列表

Scala的列表結構可以理解為一個樣例類,因為它不需要使用new方法,例如:

除了這種方法構建列表外,還可以使用::符號構建

其中Nil表示空列表,::符號表示在列表前面追加元素,所以如果沒有後面的Nil,Scala就會報錯。

列表不同於數組Array,它是鏈表結構。並且列表元素必須要是同樣的類型,如果列表裡混用其它類型,那麼它們的類型默認為Any類。所有類型的父類。

有趣的一點在於,如果類型S是類型T的子類,那麼List[S]也是List[T]的子類。這也是為什麼下面的例子可以成立,因為空列表List[Nothing]是所有類型的子類,那麼也是List[T]的子類型。

Scala的列表核心是三個方法:head(返回首元素),tail(除首元素以外的元素),isEmpty(判斷是否為空)。

Scala的列表可以利用模式匹配實現和Python一樣的解包

當然如果你不確定元素數量的話,可以利用列表構建符號::去匹配元素,沒有匹配上的元素都會變成列表賦給rest。

下面聊下Scala列表的初階方法和高階方法,兩者的區別僅在於初階方法不接受函數作為參數傳入,高階可以。

列表的拼接,使用:::符號

用模式匹配去看待列表拼接可以理解為:

只不過這裡的concat定義的是函數,而不是列表的中綴方法。

對應head和tail方法,還用init和last方法

init方法返回除末尾元素外的列表,last返回最後一個元素,顯然對於鏈表結構,它們的運算量都是O(n)級別的

map、foreach,filter

map函數很出名了,對列表每個元素做處理

foreach和map很類似,不過需要傳入的是返回為Unit的函數

filter則是過濾元素


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 鴻的學習筆記 的精彩文章:

TAG:鴻的學習筆記 |