我是 Elxir 的新手。
如果我有以下地图
recos = %{"itemScores" => [%{"item" => "i0", "score" => 0.0126078259487225},
%{"item" => "i3", "score" => 0.007569829148848128},
%{"item" => "i4", "score" => 0.007023984270125072},
%{"item" => "i33", "score" => 0.0068045477730524495}]}
Run Code Online (Sandbox Code Playgroud)
(这是地图吧?)
我将如何枚举所有 itemScores 以生成 RecommendationItems 列表?
defmodule RecommendedItem do
defstruct [:item, :score]
end
Run Code Online (Sandbox Code Playgroud)
我想它会以某种方式为 Enum.map(recos["itemScores"], fn->) 开具发票,但我不确定。
这段代码应该做你想要的:
defmodule RecommendedItem do
defstruct item: "", score: 0
end
defmodule Demo do
defp parse_list([]), do: []
defp parse_list([%{"item" => i, "score" => s} | tail]) do
[%RecommendedItem{item: i, score: s} | parse_list(tail) ]
end
def create_recommend_list(%{"itemScores" => score_list}) do
parse_list(score_list)
end
end
# And this is how you'd call it.
recos = %{"itemScores" => [%{"item" => "i0", "score" => 0.0126078259487225},
%{"item" => "i3", "score" => 0.007569829148848128},
%{"item" => "i4", "score" => 0.007023984270125072},
%{"item" => "i33", "score" => 0.0068045477730524495}]}
l = Demo.create_recommend_list(recos)
# l = [%RecommendedItem{item: "i0", score: 0.0126078259487225},
# %RecommendedItem{item: "i3", score: 0.007569829148848128},
# %RecommendedItem{item: "i4", score: 0.007023984270125072},
# %RecommendedItem{item: "i33", score: 0.0068045477730524495}]
Run Code Online (Sandbox Code Playgroud)
我希望这有帮助。虽然我想我明白你在问什么,但我不认为将每个映射转换为结构确实是你想要做的。