【发布时间】:2017-06-05 08:37:41
【问题描述】:
Elixir 中的不变性真的让我大吃一惊,这让这些语言的使用变得如此混乱。我需要迭代嵌套地图并根据迭代简单更新一些计数,但Enum.reduce 只是让我很难。说我有:
defmodule Predictor do
def past_matches() do
[
team1: %{team2: %{f: 0, a: 1}, team3: %{f: 1, a: 3}},
team2: %{team1: %{f: 3, a: 0}, team3: %{f: 2, a: 0}},
team3: %{team1: %{f: 1, a: 0}, team2: %{f: 0, a: 1}},
]
end
def init_indexes(matches) do
local = Enum.reduce matches, %{}, fn({team, _scores}, acc) ->
Map.put acc, team, %{f: 0, a: 0, n_games: 0}
end
Enum.each matches, fn({team, scores}) ->
Enum.each scores, fn({vteam, %{f: ff, a: aa}}) ->
%{f: fi, a: ai, n_games: ni} = local[team]
put_in(local[team], %{f: fi+ff, a: ai+aa, n_games: ni+1})
end
end
local
end
def run() do
local = past_matches() |> init_indexes()
end
end
我需要 local 将 f,a 和 n_games 相加。
local = %{
team1: %{f: 1, a: 4, n_games: 2}
...
}
run() 的末尾显然 local 的地图全为 0 且没有更新值。
【问题讨论】:
标签: elixir