簡體   English   中英

Elixir中元組中的Trasform列表

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM