如何从字典中循环键值对并获取每个项的值?我想出了这个,但我一直在犯错......
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 :(得分: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