如何删除 Elixir 中列表的“任何”元素

nac*_*ido 1 element list elixir

我有一个清单清单

>> list = [[1,""],[2,"b"],[3,""],[4,"c"]]
Run Code Online (Sandbox Code Playgroud)

我想删除包含“”元素的列表

>>list = [[2,"b"],[4,"c"]]
Run Code Online (Sandbox Code Playgroud)

我正在尝试寻找类似的东西

list = List.delete(list,[any,""])
Run Code Online (Sandbox Code Playgroud)

Bre*_*tty 6

您可以合并Enum.reject/2Enum.member?/2拒绝任何包含空字符串的列表

iex> Enum.reject([[1,""],[2,"b"],[3,""],[4,"c"]], &Enum.member?(&1, ""))
[[2, "b"], [4, "c"]]
Run Code Online (Sandbox Code Playgroud)

如果您的内部列表始终是相同的双项样式,并且您只想检查第二项,则还可以使用匿名函数

iex> Enum.reject([[1,""],[2,"b"],[3,""],[4,"c"]], fn [_, b] -> b == "" end)
[[2, "b"], [4, "c"]]
Run Code Online (Sandbox Code Playgroud)

或者做几乎同样事情的理解

iex> for [a, b] when b != "" <- [[1,""],[2,"b"],[3,""],[4,"c"]], do: [a, b]
[[2, "b"], [4, "c"]]
Run Code Online (Sandbox Code Playgroud)

  • 另外: `Enum.reject([[1,""],[2,"b"],[3,""],[4,"c"]], &amp; match?([_, ""], &amp;1))` 和 `Enum.reject([[1,""],[2,"b"],[3,""],[4,"c"]], fn [_,""] - &gt; true; _ -&gt; false 结束)`。 (2认同)