Erlang Central

Finding Elements in One Array but Not Another

Revision as of 02:37, 31 August 2006 by Cyberlync (Talk | contribs)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)


You want to find elements that are in one list but not another.


You want to find elements in list A that aren't in list B. Erlang provides several ways of doing this:

Use the lists:subtract Function

The lists module provides the subtract function, which takes two list and returns a new copy of the first list, such that the first occurrence of each element of the second list is removed. For example:

1> A = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16].
2> B = [2,4,6,8,9,10,12,14,15,16].
3> lists:subtract(A,B).

Note: Erlang provides native list operators for concatentation (++) and subtraction (--). The subtraction operator provides the same functionality as the lists:subtract function:

4> A -- B.

Iterate over the two lists

You can iterate over the two lists (using the lists:foreach function), and filter out any entries from list A that are also members of list B.

5> lists:foldl(fun(X,ACC) -> Y=lists:member(X, B),
5>    if Y -> [X|ACC];
5>    true -> ACC
5> end end, [], lists:reverse(A)).