У меня есть два списка, list_a = [%{id: 1, name: "Jack"}, %{id: 2, name: "John}]
и list_b = [%{id: nil, name: "Jack"}]
Чего я хочу добиться, так это то, что, сравнивая два списка, если есть дублированное имя, добавьте поле status: true
, если нет, добавьте поле status: false
.
Итак, ожидаемый результат - combined_list = [%{id: 1, name: "Jack", status: true}, %{id: 2, name: "John, status: false}]
Чтобы достичь цели, я зацикливаю два списка и объединяю результаты.
list_status_true =
for object <- list_a do
found =
Enum.find(
list_b,
fn(x) ->
x.name == object.name
end
)
if !is_nil(found) do
%{
id: object.id,
name: object.name,
status: true
}
end
end
list_status_false =
for object <- list_b do
found =
Enum.find(
list_a,
fn(x) ->
x.name == object.name
end
)
if is_nil(found) do
%{
id: object.id,
name: object.name,
status: false
}
end
end
list_status_true ++ list_status_false
Но я думаю, что эту функцию можно упростить. Есть предложения?