[英]Trasform list in tuple in Elixir
我有这样的清单
[%{User: "1"}, %{User: "2"}]
使用后
HTTPoison.request(method, url, body, headers, option)
标头在哪里
\"headers\":[{\"User\":\"1\"},{\"User_2\":\"2\"}]\r\n}
我想要一个这样的结构
[{:user, "1"},{:user, "2"},{"content-type", "application/json"}]
甚至加
{"content-type", "application/json"}
但是我不明白如何在元组中转换数据(用户)
还不清楚您到底要转换什么以及如何转换。
假设您要将[%{User: "1"}, %{User: "2"}]
转换为[{user: "1"},{user: "2"}]
。
[%{User: "1"}, %{User: "2"}]
|> Enum.map(fn(item) -> {:user, item[:User]} end)
会产生
[user: "1", user: "2"]
结果等于[{:user, "1"},{:user, "2"}]
(关键字列表)。
使用Kernel.SpecialForms.for/1
理解:
for %{User: id} <- [%{User: "1"}, %{User: "2"}], do: {:user, id}
#⇒ [user: "1", user: "2"]
请注意, [user: "1", user: "2"]
和[{:user, "1"}, {:user, "2"}]
是完全等效的 。 也就是说,两者都代表相同的元组列表(大小为2)。
要添加新的元组:只需将其添加到列表中:
[
{"content-type", "application/json"} |
(for %{User: id} <- [%{User: "1"}, %{User: "2"}], do: {:user, id})
]
#⇒ [{"content-type", "application/json"},
# {:user, "1"},
# {:user, "2"}]
或者,最后(预期将元素附加到列表的末尾会影响性能,最好像上面所示先添加,然后再添加List.reverse/1
):
users = for %{User: id} <- [%{User: "1"}, %{User: "2"}],
do: {:user, id}
users ++ [{"content-type", "application/json"}]
要将地图转换为相应的关键字列表(大小为2的元组),请使用Enum.flat_map/2
:
[%{foo: "1"}, %{baz: "2"}, %{bix: "3"}]
|> Enum.flat_map(&Map.to_list/1)
#⇒ [foo: "1", baz: "2", bix: "3"]
要将键作为字符串获取:
[%{foo: "1"}, %{baz: "2"}, %{bix: "3"}]
|> Enum.flat_map(fn map ->
for {k, v} <- map, do: {Atom.to_string(k), v}
end)
#⇒ [{"foo", "1"}, {"baz", "2"}, {"bix", "3"}]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.