>

모든 사람들로부터 총 수의 피니시와 실패한 레이스를 원합니다. 아래 코드는 작동하지만 잘 생각하지 않습니다. 더 좋은 엘릭서 방법이 있습니까?

person_races = %{
"joy" => %{ "medals" => [%{ "race" => "finished"}, %{"race" => 
"finished"}, %{"race" => "failed"}]},
"jan" => %{ "medals" => [%{ "race" => "finished"}, %{"race" => 
"finished"}, %{"race" => "failed"}]},
"jim" => %{ "medals" => [%{ "race" => "finished"}, %{"race" => 
"finished"}, %{"race" => "failed"}]},
}
answer = Enum.reduce(person_races, [], fn({_k,v}, acc) -> 
  acc ++ [v]
end)
|> Enum.reduce([], fn(x, acc) ->
  acc ++ x["medals"]
end)
|> Enum.reduce(%{}, fn(k, acc) ->
    cond do
      k["race"] == "failed" ->
        Map.update(acc, :failed, 1, &(&1 + 1))
      k["race"] == "finished" ->
        Map.update(acc, :finished, 1, &(&1 + 1))
    end
end)
IO.inspect answer #=> %{failed: 3, finished: 6}

  • 답변 # 1

    이것을 파이프 라인으로 구현할 수 있습니다 :

    person_races 
    |> Map.values() 
    |> Enum.flat_map(&Map.get(&1, "medals")) 
    |> Enum.map(&Map.get(&1, "race")) 
    |> Enum.reduce(%{}, fn x, acc -> Map.update(acc, x, 1, & &1 + 1) end)
    %{"failed" => 3, "finished" => 6}
    
    

  • 이전 chromenotificationOS X에서 알림을 표시하지 않음
  • 다음 java - 유창한 인터페이스 대 빌더 패턴 - 장점 및 단점