source

Elixir: 키워드 목록을 지도로 변환하는 방법은?

lovecheck 2023. 3. 23. 22:51
반응형

Elixir: 키워드 목록을 지도로 변환하는 방법은?

Poison JSON 파서가 검증 오류 목록을 JSON 형식으로 올바르게 출력할 수 있도록 맵으로 변환하는Ecto 변경 세트오류 키워드 목록이 있습니다.

다음과 같은 에러 리스트가 표시됩니다.

[:topic_id, "can't be blank", :created_by, "can't be blank"]

...그리고 다음과 같은 에러 맵을 입수하고 싶습니다.

%{topic_id: "can't be blank", created_by: "can't be blank"}

또는 문자열 목록으로 변환할 수 있다면 그것도 사용할 수 있습니다.

이러한 작업 중 하나를 수행하는 가장 좋은 방법은 무엇입니까?

여기에 있는 것은 키워드 리스트가 아니라 키를 나타내는 홀수 요소와 값을 나타내는 짝수 요소가 모두 포함된 목록입니다.

차이점은 다음과 같습니다.

[:topic_id, "can't be blank", :created_by, "can't be blank"] # List
[topic_id: "can't be blank", created_by: "can't be blank"]   # Keyword List

Enum.into/2를 사용하여 키워드 목록을 맵으로 변환할 수 있습니다.

Enum.into([topic_id: "can't be blank", created_by: "can't be blank"], %{})

데이터 구조는 목록이므로 Enum.chunk_every/2 Enum.reduce/3사용하여 변환할 수 있습니다.

[:topic_id, "can't be blank", :created_by, "can't be blank"]
|> Enum.chunk_every(2)
|> Enum.reduce(%{}, fn ([key, val], acc) -> Map.put(acc, key, val) end)

키워드 리스트에 대한 자세한 내용은http://http://elixir-lang.org/getting-started/maps-and-dicts.html 를 참조해 주세요.

이를 위한 또 다른 방법은 다음과 같이 결합하는 것입니다.Enum.chunk/2와 함께Enum.into/3. 예:

[:topic_id, "can't be blank", :created_by, "can't be blank"]
|> Enum.chunk(2)
|> Enum.into(%{}, fn [key, val] -> {key, val} end)

또 다른 방법은 목록 이해를 사용하는 것입니다.

iex> list = [:topic_id, "can't be blank", :created_by, "can't be blank"]
iex> map = for [key, val] <- Enum.chunk(list, 2), into: %{}, do: {key, val}
%{created_by: "can't be blank", topic_id: "can't be blank"}

또한 목록을 키워드 목록으로 변환할 수 있습니다.

iex> klist = for [key, val] <- Enum.chunk(list, 2), do: {key, val}
[topic_id: "can't be blank", created_by: "can't be blank"]

경우에 따라서는 도움이 될 수도 있습니다.

이 사용 사례에 대한 자세한 내용은 http://elixir-lang.org/getting-started/comprehensions.html#results-other-than-lists를 참조하십시오.

언급URL : https://stackoverflow.com/questions/31549555/elixir-how-to-convert-a-keyword-list-to-a-map

반응형