【问题标题】:Filter elements from two lists从两个列表中过滤元素
【发布时间】:2014-06-03 09:02:00
【问题描述】:

基本上我有两个类似的列表

L1 = [one, two, three, five, eleven, million]
L2 = [five, million]

所以我想从第二个列表 L2 中过滤元素

得到

[one, two, tree, eleven]

我已经使用 foldl 函数循环 L1,然后使用 foreach 循环来决定要追加比较列表 2 的元素,但我似乎没有正确的逻辑:我有这样的东西

56 filter_a(L1,L2) ->
 57    List = foldl(fun(X,A) ->
 58                 L = lists:foreach(fun(E) ->
 59                             case E =:= X of
 60                                 true ->
 61                                     [];
 62                                 _-> 
 63                                     X
 64                             end 
 65                     end, L2),
 66                 lists:append([A,[L]])
 67         end, [], L1),
 68    List.

我怎样才能以简单的方式做到这一点?

【问题讨论】:

    标签: functional-programming erlang erlang-otp concurrent-programming


    【解决方案1】:

    为什么不只是L1 -- L2?复杂度是一样的 O(N*M)。

    【讨论】:

      【解决方案2】:

      您可以使用列表推导:

      filter_a(L1,L2) ->
          [ X || X <- L1, lists:member(X,L2) =/= true ]. 
      

      【讨论】:

        猜你喜欢
        • 2021-05-06
        • 2018-06-13
        • 2011-02-09
        • 2017-10-15
        • 2018-07-14
        • 2023-03-23
        • 1970-01-01
        • 2019-12-24
        • 2020-10-23
        相关资源
        最近更新 更多