Hello, I have map which I want to convert it to string like this:
the map:
%{last_name: "tavakkoli", name: "shahryar"}
the string I need:
"name", "shahryar", "last_name", "tavakkoli"
it should be noted, I need to delete last “,”, and don’t need the string in list , it should be string for example
"name", "shahryar", "last_name", params."tavakkoli",
to
"name", "shahryar", "last_name", params."tavakkoli"
I tried to convert it to what I needed but I couldn’t.
Thanks.
1 Like
outlog
March 8, 2019, 10:43am
2
hmm that looks like a list?
anyways
map = %{last_name: "tavakkoli", name: "shahryar"}
string = "name,#{map.name},last_name,#{map.last_name}"
"name,shahryar,last_name,tavakkoli"
list = ["name", map.name, "last_name", map.last_name]
["name", "shahryar", "last_name", "tavakkoli"]
though I don’t quite understand exactly what you need to output… or does it need to be dynamic?
Map.keys(map)
|> Enum.map(fn key -> "#{key},#{map[key]}" end)
|> Enum.join(",")
"last_name,tavakkoli,name,shahryar"
4 Likes
Not sure if this is exactly what you wanted, but you can use Enum.map
to convert each key/value into a string and then Enum.join
to join strings with a comma. You can use Enum.map_join
to do both at the same time:
iex> map = %{last_name: "tavakkoli", name: "shahryar"}
iex> Enum.map_join(map, ", ", fn {key, val} -> ~s{"#{key}", "#{val}"} end)
"\"last_name\", \"tavakkoli\", \"name\", \"shahryar\""
Note, maps are unordered so if the order matters for the final string you should use a different data structure for the input, e.g. keyword list.
10 Likes