- Elixir 教程
- Elixir - 首頁
- Elixir - 概述
- Elixir - 環境
- Elixir - 基本語法
- Elixir - 資料型別
- Elixir - 變數
- Elixir - 運算子
- Elixir - 模式匹配
- Elixir - 決策
- Elixir - 字串
- Elixir - 字元列表
- Elixir - 列表和元組
- Elixir - 關鍵詞列表
- Elixir - 對映
- Elixir - 模組
- Elixir - 別名
- Elixir - 函式
- Elixir - 遞迴
- Elixir - 迴圈
- Elixir - 可列舉
- Elixir - 流
- Elixir - 結構體
- Elixir - 協議
- Elixir - 檔案I/O
- Elixir - 程序
- Elixir - 符號
- Elixir - 推導式
- Elixir - 型別說明
- Elixir - 行為
- Elixir - 錯誤處理
- Elixir - 宏
- Elixir - 庫
- Elixir 有用資源
- Elixir - 快速指南
- Elixir - 有用資源
- Elixir - 討論
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