2015-11-08 91 views
2

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

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

回答

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  
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) 但是说实话,有点难以分辨你想要做什么。如果你有更具体的问题,请编辑,我们会看看我们是否可以给你一个更具体的答案。