在dict

时间:2015-11-08 15:47:20

标签: elixir phoenix-framework

如何从字典中循环键值对并获取每个项的值?我想出了这个,但我一直在犯错......

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

2 个答案:

答案 0 :(得分:0)

看看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) 但老实说,要告诉你要做什么有点难。如果您有更具体的问题,请进行编辑,我们会看看能否为您提供更具体的答案。

答案 1 :(得分:0)

要指定已在模块中定义的映射函数,您需要使用语法&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