Erlang:根据用户输入从多个列表中过滤元素

Erlang: Filter elements from multiple lists based on user input

我在 erlang 中有 3 个列表

EmpIDList = [10020, 10010, 10040, 10030],
EmpLocation = [Sweden, Germany, USA, Italy],
EmpSalary = [100k, 125k, 165k, 200k]

如果用户提供的输入为 [10040, 10020],则预期输出为 3 个列表:

[10040, 10020], [USA, Sweden], [165k, 100k].

如何实现?任何输入都会有所帮助。

注:

  1. 所有 3 个列表将始终具有相同数量的元素。
  2. EmpLocation 中的第一个元素对应于 EmpIDList 中的第一个元素,依此类推。
  3. EmpSalary 中的第一个元素对应于 EmpIDList 中的第一个元素,依此类推。

首先使用 lists:zip3 合并三个列表中的数据,以便将每个员工的数据保存在一起:

> EmpList = lists:zip3(EmpIDList, EmpLocation, EmpSalary).
[{10020,sweden,100},
 {10010,germany,125},
 {10040,usa,165},
 {10030,italy,200}]

然后使用 lists:keyfind 获取您感兴趣的员工 - 请注意末尾附近的员工 ID 列表:

> FilteredTuples = [lists:keyfind(Id, 1, EmpList) || Id <- [10040, 10020]].
[{10040,usa,165},{10020,sweden,100}]

最后“解压缩”元组以获得您需要的结果格式:

> lists:unzip3(FilteredTuples).
{[10040,10020],[usa,sweden],[165,100]}