私はマップと二つのリストを持っている:エリクシール/フェニックス出口ループ
apps = [%{name: "app1", version: "0.0.1"}, %{name: "app2", version: "0.0.1"}]
updates_list = [%{name: "app1", version: "0.0.2"},
%{name: "app2", version: "0.0.1"},
%{name: "app3", version: "0.0.1"},
%{name: "app4", version: "0.0.1"}]
や更新があるかどうかを示すためにapps
リストの各要素に新しいキーを置くために、updates_list
を列挙する必要があります。
updates_map = Enum.map(updates_list, fn (x) -> Map.put(%{}, x.name, x.version) end)
result = Enum.map(apps, fn (x) -> map_updates(x, updates_map) end)
と機能::私は、次の機能を試してみました
result = [%{name: "app1", version: "0.0.1", new_version: true},
%{name: "app2", version: "0.0.1", new_version: false}]
:
defp map_updates(app, updates_map) do
app_map = Map.from_struct(app)
for update <- updates_map do
if Map.has_key?(update, app_map.name) do
if Map.fetch(update, app_map.name) != app_map.version do
app_map = app_map |> Map.put(:new_version, true)
else
app_map = app_map |> Map.put(:new_version, false)
end
else
app_map = app_map
end
end
app_map
end
すなわちここで
app1
のための新たなバージョンがある、私は
new_version: true/false
を追加して、目的の結果を取得する必要があります
しかし、すべてのアプリケーションですべてupdates_map
を列挙しているので、それを上書きするだけで結果は得られません。ループを終了する方法、または上記のようにresult
を達成するために変更を保存する方法はありますか?どんなアドバイスもありがとう!
ちょっと@Dogbert私はあなたのソリューションを試して、それは動作します!ありがとうございました!私はEnum.anyからブール値を使うことを考慮しませんでしたか?今はずっと簡単です!良い一日を! – Ilya