Fla*_*lan 3 functional-programming list-comprehension elixir
我有一个这样的元组列表
[
{:ok, {"0000 0000 "}},
{:ok, %{AM01: %{"C4" => "1111", "C5" => "1"}}},
{:ok, %{AM04: %{"C2" => "2222", "C6" => "2"}}}
]
Run Code Online (Sandbox Code Playgroud)
元组:ok的第一个元素表示映射确定。
如何将这个清单缩小为一个这样的清单
[:ok, :ok, :ok]
Run Code Online (Sandbox Code Playgroud)
因为在此转换之后,我将检查Enum.all是否一切正常?
@JustinWood展示了最惯用的erlang方法。
最惯用的长生不老药方法可能是使用Kernel.match?/2,这基本上是两个/ 子句的语法糖:truefalse
Enum.all?(input, &match?({:ok, _}, &1))
#? true
Run Code Online (Sandbox Code Playgroud)
:ok通常,所有操作都是通过Kernel.SpecialForms.for/1列表理解来完成的,列表理解可以在一个循环中进行过滤和映射:
for {:ok, _} <- input, do: :ok
#? [:ok, :ok, :ok]
Run Code Online (Sandbox Code Playgroud)
无需遍历列表以转换为原子列表,您可以Enum.all?/2立即使用。
result = [
{:ok, {"0000 0000 "}},
{:ok, %{AM01: %{"C4" => "1111", "C5" => "1"}}},
{:ok, %{AM04: %{"C2" => "2222", "C6" => "2"}}}
]
Enum.all?(result, fn
{:ok, _} -> true
_ -> false
end)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
92 次 |
| 最近记录: |