W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
列表和元組的區(qū)別是什么?
列表以連接表的形式在內(nèi)存中存儲,即列表中的每個元素包含了它的值和指向下一個元素的指針,直到列表的盡頭。我們把每對值和指針稱為一個驛站(cons cell):
iex> list = [1 | [2 | [3 | []]]]
[1, 2, 3]
這意味著訪問一個列表的長度是一個線性操作:我們需要貫穿整個列表來算出它的長度。更新一個列表只需要在它前面加上元素:
iex> [0 | list]
[0, 1, 2, 3]
而元組,是以連續(xù)的方式存儲在內(nèi)存中的。這意味著獲得元組長度或通過坐標訪問元素都很快。然而,更新或添加元素卻很復雜,因為必須復制整個元組。
不同的性能特點決定了這些數(shù)據(jù)結構的用途。元組常用于返回函數(shù)的額外信息。例如,是一個用于讀取文件內(nèi)容的函數(shù),它返回了一個元組:?File.read/1
?
iex> File.read("path/to/existing/file")
{:ok, "... contents ..."}
iex> File.read("path/to/unknown/file")
{:error, :anoint}
如果提供給的路徑存在,那么它返回了一個元組,由原子作為第一個元素,文件內(nèi)容作為第二個。否則,返回的元組會包含和錯誤描述。?File.read/1
??:ok
??:error
?
大多數(shù)時候,Elixir會引導你做正確的事。例如,函數(shù)可以訪問元組,但是對于列表卻沒有定義相似的函數(shù):?elem/2
?
iex> tuple = {:ok, "hello"}
{:ok, "hello"}
iex> elem(tuple, 1)
"hello"
當"計算"一個數(shù)據(jù)結構中元素數(shù)量時,Elixir也制定了一條簡單的規(guī)則:如果操作時間是固定的(例如,值是計算好的),則函數(shù)被命名為大?。蝗舨僮鲿r間是線性的(例如,計算長度的時間隨著輸入的增長而變長),則函數(shù)被命名為長度。?size
??length
?
例如,我們已經(jīng)學習了4個計量函數(shù):(字符串中的字節(jié)數(shù)),(元組大小),(列表長度)以及(字符串中的字素數(shù))。這說明,我們使用來獲取字符串的字節(jié)數(shù)是廉價的,但用來得到字符串中unicode字符的數(shù)量就需要貫穿整個字符串。?byte_size/1
??tuple_size/1
??length/1
??String.length/1
??byte_size
??String.length
?
Elixir也提供了,和作為數(shù)據(jù)類型(通常用于進程通信),當講到進程時我們會簡單地介紹它們?,F(xiàn)在,讓我們看一些對于基本類型的基本操作。?Port
??Reference
??PID
?
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: