【问题标题】:Erlang: Filter elements from multiple lists based on user inputErlang:根据用户输入从多个列表中过滤元素
【发布时间】:2021-01-12 00:44:13
【问题描述】:

我在 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 中的第一个元素,依此类推。

【问题讨论】:

    标签: list filter erlang zip


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2018-07-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-30
      相关资源
      最近更新 更多