#list #filter #erlang #zip
#Список #Фильтр #erlang #zip
Вопрос:
У меня есть 3 списка в erlang как
EmpIDList = [10020, 10010, 10040, 10030],
EmpLocation = [Sweden, Germany, USA, Italy],
EmpSalary = [100k, 125k, 165k, 200k]
Если пользователь вводит данные как [10040, 10020], то ожидаемый результат — 3 списка:
[10040, 10020], [USA, Sweden], [165k, 100k].
Как этого добиться? Любой ввод будет полезен.
Примечание:
- все 3 списка всегда будут иметь одинаковое количество элементов.
- Первый элемент из EmpLocation соответствует первому элементу в EmpIDList и так далее.
- Первый элемент из EmpSalary соответствует первому элементу в EmpIDList и так далее.
Ответ №1:
Сначала объедините данные из трех списков, используя lists:zip3
, чтобы данные для каждого сотрудника хранились вместе:
> EmpList = lists:zip3(EmpIDList, EmpLocation, EmpSalary).
[{10020,sweden,100},
{10010,germany,125},
{10040,usa,165},
{10030,italy,200}]
Затем используйте lists:keyfind
, чтобы получить интересующих вас сотрудников — обратите внимание на список идентификаторов сотрудников ближе к концу:
> FilteredTuples = [lists:keyfind(Id, 1, EmpList) || Id <- [10040, 10020]].
[{10040,usa,165},{10020,sweden,100}]
И, наконец, «разархивируйте» кортежи, чтобы получить нужный вам формат результата:
> lists:unzip3(FilteredTuples).
{[10040,10020],[usa,sweden],[165,100]}