如何操作Elixir中枚举的char列表中的单个字符?

Chr*_*ian 2 elixir

假设我想通过组合器传递一个枚举的char列表filter,以便删除所有类似的:

'abc' |> Enum.filter(fn ch -> ch != 'a' end)
Run Code Online (Sandbox Code Playgroud)

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

sas*_*ric 6

你可以使用?这个:

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

  • 我不确定我理解这个问题.你想获得与正则表达式匹配的所有字符?如果是的话,我会选择Regex.scan(~r/[bc] /,"abcbd").注意双引号 - Regex只适用于二进制字符串.如果你有一个charlist,你可以简单地通过to_string/1将它转换为二进制文件. (3认同)