0
我有兩個列表與地圖:藥劑/鳳凰退出循環
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"}]
,並需要通過updates_list
枚舉,把新鑰匙插入在apps
列表中的每個元素顯示,如果有更新。即在這裏有新的版本爲app1
,我需要添加new_version: true/false
並得到期望的結果:
result = [%{name: "app1", version: "0.0.1", new_version: true},
%{name: "app2", version: "0.0.1", new_version: false}]
我曾嘗試用下面的函數:
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)
和功能:
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
但是,因爲它列舉了所有的updates_map
爲每個應用程序,它只是覆蓋它,我沒有結果。如何退出循環,或保留更改以達到上述result
?任何建議表示讚賞!
嘿@Dogbert我試過你的解決方案,它的工作原理!謝謝!我沒有考慮從Enum.any中使用布爾值?現在看起來更簡單了!祝你今天愉快! – Ilya