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

fcg9iug3  于 2022-12-16  发布在  Erlang
关注(0)|答案(1)|浏览(196)

我有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].

如何做到这一点?任何意见都将是有帮助的。
注:
1.所有3个列表将总是具有相同数量的元素。

  1. EmpLocation中的第一个元素对应于EmpIDList中的第一个元素,依此类推。
  2. EmpSalary中的第一个元素对应于EmpIDList中的第一个元素,依此类推。
lymnna71

lymnna711#

首先使用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]}

相关问题