Elixir地图返回零

问题描述 投票:0回答:1

我想对一个给定的charlist进行简单的映射。

def encode(str) do
  map = %{
    'A' => '1',
    'B' => '2',
    'C' => '3',
    'D' => '4'
  }

  Enum.map(str, fn char -> map[char] end)
end

当我运行这个程序时,我得到了一个无值的列表。

encode('ABCD') # [nil, nil, nil, nil]

我到底做错了什么?

elixir
1个回答
4
投票

'A' 本身是一个列表,包含一个单字符。

is_list('A')
#⇒ true
'A' ++ 'B' ++ 'C' ++ 'D'
#⇒ 'ABCD'

而你需要的映射键是 字符,不 列表.

map = %{
  ?A => '1',
  ?B => '2',
  ?C => '3',
  ?D => '4'
}

Enum.map('ABCD', fn char -> map[char] end)
# or Enum.map('ABCD', &map[&1])
#⇒ ['1', '2', '3', '4']
© www.soinside.com 2019 - 2024. All rights reserved.