遍历字典中的值

Looping through values in dict

如何循环字典中的键值对并获取每个项目的值?我想到了这个,但我不断收到错误...

defp processValues (ticket) do IO.inspect ticket.value # this doesnt work end

Repo.all(Ticket) #get all tickets |> Enum.group_by(&(&1.aggregate_id)) # group by id |> Dict.to_list # maybe not needed? |> Enum.map(&(processValues(&1))) # return processed tickets

看看this documentation。我会特别提请您注意文档的这一部分:

iex> for {key, val} <- %{"a" => 1, "b" => 2}, into: %{}, do: {key, val * val}
%{"a" => 1, "b" => 4} 

你想要类似于

的东西
for {key, value} <- ticket, do: process_values(value) # Note snake case.

另请注意,大写 "T" 是错误的。它需要小写"t"。我的意思是在你的例子中它应该是 Repo.all(ticket) 而不是 Repo.all(Ticket) 但老实说,很难说出您要做什么。如果您有更具体的问题,请编辑,我们将看看是否可以为您提供更具体的答案。

要指定已在模块中定义的映射函数,您需要使用语法 &ModuleName.function_name/arity。在您的情况下,它将是 &processValues/1.

下面是一个演示该概念的简化示例:

list  = [%{aggregate_id: 1, value: "test"}, %{aggregate_id: 2, value: "test2"}]

defmodule T do
    defp processValues(ticket) do
        IO.inspect ticket.value
    end

    def process_list(list) do
        list |> Enum.map(&processValues/1)
    end
end

T.process_list list