elixir - 将列表转换为以前两个字母为索引的映射
问题描述
我有清单:
["AM00", "CC11", "CB11"]
我需要像这样在地图中转换这个列表:
%{"AM" => "00", "CC" => "11", "CB" => "11"}
我尝试使用 Enum.map 但它不起作用:
["AM00", "CC11", "CB11"]
|> Map.new(&Enum.map(&1, fn x -> x end), %{})
解决方案
二进制模式匹配可以剖析字符串:
data = ["AM00", "CC11", "CB11"]
for <<key::binary-size(2), value::binary>> <- data, into: %{} do
{key, value}
end
输出:
%{"AM" => "00", "CB" => "11", "CC" => "11"}
这只适用于单字节字符。
要处理UTF-8
字符以及ASCII
字符:
data = ["èü00", "C€11", "€ä11"]
for <<char1::utf8, char2::utf8, rest::binary>> <- data, into: %{} do
{<<char1::utf8, char2::utf8>>, rest}
end
输出:
%{"C€" => "11", "èü" => "00", "€ä" => "11"}
推荐阅读
- python - Python3 中 os.execvp() 中的任何文件描述符更改?
- unicode - 不同 Unicode 规范化形式的最大字符更改数是多少?
- typo3-9.x - DataHandler TYPO3 9 中的“截断不正确的 DOUBLE 值”错误
- java - Spring Boot 异步休息调用
- ios - 什么是 iOS 运行时标头?
- latex - 在 Latex 中放置 paracol 和脚注
- python - AttributeError:“_io.StringIO”对象没有属性“StringIO”
- python - 不可靠的 selenium webdriver 使用 python 点击
- android - 使用 Android 意图过滤器 pathPattern 匹配文件名
- java - 将另一个 servlet 部署到 wildfly 实例