Scala 系列 資料結構

2021-10-05 16:05:05 字數 3388 閱讀 7696

本文主要對scala語言的資料結構進行介紹

陣列 array

// 中給出陣列型別 ()中給出陣列元素個數

val arr =

newarray

[int](3

)// 下標從0開始

arr(0)

=10

// 自動推斷型別

val arr =

array(1

,2,3

)

// 高維陣列 3行4列

val matrix = array.ofdim[int](3

,4)// 索引

matrix(0

)(1)

// or

val matrix =

array

(array(1

,2),

array(3

,4))

元組 tuple

val t =

("big"

,2015

,45.0

)// 索引 訪問元組元素 索引是基於1的 不是基於0的

t._1

// 返回 "big"

列表 list

var l =

list

("a"

,"b"

,"c"

,"d"

)l.head

// 返回 元素"a"

l.tail

// 返回列表 list("b", "c", "d")

l.reverse

// 反轉列表 返回 list(3, 2, 1)

l.mkstring

("^ "

)// 返回用列表元素組成的字串 "3^ 2^ 1"

l.isempty

// 判斷列表是否為空

l.length

// 返回列表 l 的元素數量

l.drop(2

)// 返回去掉前兩個元素的列表

l.dropright(2

)// 返回去掉後兩個元素的列表

// 把新元素組合到列表的最前端

var l2 =

"e":

:l// 得到 list("e", "a", "b", "c", "d")

var l3 = l :

+"e"

// 得到 list("a", "b", "c", "d", "e")

// 所以列表也可以使用如下方法建立

var l =

"e":

:"a"::

"b":

:"c"::

"d":

: nil

val l1 =

list(1

,2)val l2 =

list(3

,4)// 實現列表的疊加 相當於python裡面的 l1 + l2

l1 :

:: l2

// 得到list(1,2,3,4)

vector

val vecl =

vector(1

,2)// 得到 vector(3,4,1,2)

val vec2 =3+

:4+: vec1

// 得到 vector(3,4,1,2,5)

val vec3 = vec2 :

+5

range

// 包含5

// 等價於 1 until 5 ( 不包含5 )

val r =

newrange(1

,5,1

)// 包含5

1 to 5

集合 set

// 建立不可變集合

var s1 =

set(

'a',

'b')

// 建立可變集合

import scala.collection.mutable.set

var s2 =

set(

'a',

'b')

// 可變集合與不可變集合的操作

// 相當於把 s1 加上 'c' 然後把得到的結果再賦值給 s1 所以 s1 必須宣告為不可變集合

s1 +=

'c'// 相當於原位相加

s2 +=

'c'// 新增/刪除多個元素

s2 ++

=list

('d'

,'e'

,'f'

)s2 --

=list

('d'

,'f'

)// 刪除所有元素

s2.clear

對映 map

// 不可變對映

// 不能修改某個key的value 不能新增鍵值對

val uni =

map(

"nju"

->

"nanjing uni"

,"nyu"

->

"newyork uni"

)// 是否存在nju這個鍵

uni.

contains

("nju"

)// 獲取nju對應的value

uni(

"nju"

)// 可變對映

import scala.collection.mutable.map

val uni =

map(

"nju"

->

"nanjing uni"

)// 為對映增加元素

// 原位增加

uni +

"nyu"

->

"newyork uni"

// 獲取鍵列舉器/值列舉器

uni.keys

uni.values

參考資料:

《廈門大學-spark程式設計基礎(mooc)》

《functional programming principles in scala(coursera)》

scala資料結構 三 棧

棧主要兩個操作 入棧 push 和出棧 pop 1.子程式的呼叫 在跳往子程式前,會將下個指令的位址存到堆疊中,直到子程式執行完後再將位址取出,回到原來的程式中 2.處理遞迴 和子程式的呼叫類似,只是除了儲存下乙個指定的位址,將引數,區域變數等資料存入堆疊中 3.表示式的轉換與求值 實際解決 計算器...

資料結構系列( )樹狀結構

樹 是有乙個或乙個以上的節點組成,存在乙個特殊的節點,稱為樹根。每個節點是一些資料和指標組合而成的記錄。除了樹根,其餘節點可分為n 0個互斥的集合,其中每乙個子集合本身也是一種樹狀結構,即此根節點的子樹。此外一棵合法的樹,節點間可以互相連線,但不能形成無出口的迴路。度數 每個節點所有子樹的個數。層數...

資料結構系列( )排序

排序是指將一組資料,按照特定規則調換位置,使資料具有某種順序關係。排序的移動方式可分為直接移動和邏輯移動。直接移動是直接交換儲存資料的位置,邏輯移動是改變指向這些資料的輔助指標的值。排序的分類 排序通常按照資料量的多寡和所使用的記憶體可分為內部排序和外部排序,資料量小則可以全部載入到記憶體來進行的排...