호두나무 공방/Exercism in Elixir

Basketball Website - Exercism in Elixir

2022. 4. 28. 23:32

문제 보기

중첩된 맵을 탐색하여 값을 얻어오는 문제였다. 하나의 기능을 직접 구현(extract_from_path)하는 것이 한 번, get_in 함수를 이용해 구현(get_in_path)하는 것이 한 번. 같은 기능도 직접 만들어보면 조금 더 잘 이해되는 것 같다.

defmodule BasketballWebsite do
  def extract_from_path(data, path) do
    do_extract(data, String.split(path, "."))
  end

  # 키에 해당하는 항목이 없는 경우
  defp do_extract(nil, _), do: nil

  # 원하는 path를 다 찾아들어간 경우
  defp do_extract(value, []), do: value

  # 재귀
  defp do_extract(data = %{}, [h | t]) do
    Map.get(data, h) |> do_extract(t)
  end

  def get_in_path(data, path) do
    get_in(data, String.split(path, "."))
  end
end