Elixir - 關鍵詞列表



到目前為止,我們還沒有討論任何關聯資料結構,即可以將某個值(或多個值)與鍵關聯的資料結構。不同的語言使用不同的名稱來稱呼這些特性,例如字典、雜湊表、關聯陣列等。

在 Elixir 中,我們有兩個主要的關聯資料結構:關鍵詞列表和對映。在本章中,我們將重點介紹關鍵詞列表。

在許多函數語言程式設計語言中,通常使用由 2 個專案組成的元組列表來表示關聯資料結構。在 Elixir 中,當我們有一個元組列表並且元組的第一個專案(即鍵)是一個原子時,我們稱之為關鍵詞列表。請考慮以下示例以瞭解這一點:

list = [{:a, 1}, {:b, 2}]

Elixir 支援定義此類列表的特殊語法。我們可以將冒號放在每個原子的末尾,並完全去除元組。例如:

list_1 = [{:a, 1}, {:b, 2}]
list_2 = [a: 1, b: 2]
IO.puts(list_1 == list_2)

上面的程式將生成以下結果:

true

這兩個都表示一個關鍵詞列表。由於關鍵詞列表也是列表,因此我們可以對它們使用我們在列表上使用過的所有操作。

要檢索與關鍵詞列表中的原子關聯的值,請將原子作為 [] 傳遞到列表名稱之後:

list = [a: 1, b: 2]
IO.puts(list[:a])

上面的程式生成以下結果:

1

關鍵詞列表具有三個特殊特性:

  • 鍵必須是原子。
  • 鍵是有序的,由開發者指定。
  • 鍵可以多次出現。

為了操作關鍵詞列表,Elixir 提供了 Keyword 模組。但是請記住,關鍵詞列表只是列表,因此它們提供與列表相同的線性效能特徵。列表越長,查詢鍵、計數專案數等所需的時間就越長。因此,關鍵詞列表主要在 Elixir 中用作選項。如果您需要儲存許多專案或保證一個鍵最多與一個值關聯,則應改用對映。

訪問鍵

要訪問與給定鍵關聯的值,我們使用 Keyword.get 函式。它返回與給定鍵關聯的第一個值。要獲取所有值,我們使用 Keyword.get_values 函式。例如:

kl = [a: 1, a: 2, b: 3] 
IO.puts(Keyword.get(kl, :a)) 
IO.puts(Keyword.get_values(kl)) 

上面的程式將生成以下結果:

1
[1, 2]

插入鍵

要新增新值,請使用 Keyword.put_new。如果鍵已存在,則其值保持不變:

kl = [a: 1, a: 2, b: 3]
kl_new = Keyword.put_new(kl, :c, 5)
IO.puts(Keyword.get(kl_new, :c))

執行上述程式時,它將生成一個包含附加鍵 c 的新關鍵詞列表,並生成以下結果:

5

刪除鍵

如果要刪除某個鍵的所有條目,請使用 Keyword.delete;要僅刪除某個鍵的第一個條目,請使用 Keyword.delete_first

kl = [a: 1, a: 2, b: 3, c: 0]
kl = Keyword.delete_first(kl, :b)
kl = Keyword.delete(kl, :a)

IO.puts(Keyword.get(kl, :a))
IO.puts(Keyword.get(kl, :b))
IO.puts(Keyword.get(kl, :c))

這將刪除列表中的第一個 b 和列表中的所有 a。執行上述程式時,它將生成以下結果:

0
廣告
© . All rights reserved.