spinners
spinners

Reputation: 2689

Elixir map returns nil

I want to perform a simple mapping of a given charlist

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

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

When I run this I get a list of nil values.

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

What am I doing wrong?

Upvotes: 0

Views: 721

Answers (1)

Aleksei Matiushkin
Aleksei Matiushkin

Reputation: 121010

'A' is a list itself, containing a single char.

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

What you need instead as map keys, are chars, not lists.

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']

Upvotes: 4

Related Questions