- 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中遍歷可列舉資料的語法糖。本章我們將使用列表推導式進行迭代和生成。
基礎
在可列舉資料章節中,我們學習了Enum模組中的map函式。
Enum.map(1..3, &(&1 * 2))
在這個例子中,我們將一個函式作為第二個引數傳入。範圍內的每個元素都將傳遞到該函式中,然後返回一個包含新值的新列表。
對映、過濾和轉換在Elixir中非常常見的操作,因此與之前的示例相比,有一種略微不同的方法可以達到相同的結果:
for n <- 1..3, do: n * 2
執行上述程式碼後,將產生以下結果:
[2, 4, 6]
第二個例子是一個列表推導式,正如你可能看到的,它只是你也可以使用`Enum.map`函式實現的功能的語法糖。但是,就效能而言,使用列表推導式與使用Enum模組中的函式相比,並沒有實際好處。
列表推導式不限於列表,也可以用於所有可列舉資料。
過濾
你可以將過濾器視為列表推導式的一種保護機制。當過濾後的值返回`false`或`nil`時,它將從最終列表中排除。讓我們遍歷一個範圍,只關注偶數。我們將使用Integer模組中的`is_even`函式來檢查一個值是偶數還是奇數。
import Integer IO.puts(for x <- 1..10, is_even(x), do: x)
執行上述程式碼後,將產生以下結果:
[2, 4, 6, 8, 10]
我們也可以在同一個列表推導式中使用多個過濾器。用逗號分隔,在`is_even`過濾器之後新增另一個你想要的過濾器。
:into選項
在上面的例子中,所有列表推導式的結果都返回列表。但是,透過將`:into`選項傳遞到列表推導式,可以將結果插入到不同的資料結構中。
例如,可以使用`:into`選項和一個位元串生成器輕鬆刪除字串中的所有空格:
IO.puts(for <<c <- " hello world ">>, c != ?\s, into: "", do: <<c>>)
執行上述程式碼後,將產生以下結果:
helloworld
上面的程式碼使用`c != ?\s`過濾器刪除字串中的所有空格,然後使用`:into`選項將所有返回的字元放入一個字串中。
廣告