如何在 Elixir 中对枚举字符列表中的单个字符进行操作



假设我想通过像filter这样的组合器传递一个枚举的字符列表,以便像这样删除所有a:

'abc' |> Enum.filter(fn ch -> ch != 'a' end)

这不会返回预期的结果,因为枚举的字符实际上是代码点,此处为 97、99 和 99。因此,谓词可以表示为ch != 97<<ch::utf8>> != "a",以达到预期的结果。
在这种情况下,有没有更好、更直观的表达谓词的方式?

您可以使用?来实现此目的:

iex(1)> 'abc' |> Enum.filter(fn ch -> ch != ?a end)
'bc'

你也可以反过来做:

'abc' |> Enum.filter(fn ch -> [ch] != 'a' end)

虽然我更喜欢使用?a,而且我更喜欢使用二进制文件而不是字符列表。

最新更新