Erlang Thursday – ordsets:subtract/2

今天的Erlang Thursday讲的是 ordsets:subtract/2.

ordsets:substract/2 有两个入参,它们都是有序集合,返回值是一个由只在第一个有序集合入参而不在第二个有序集合入参的元素组成的有序集合。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
OrderedSetA = ordsets:from_list([5, 4, 3, 2, 1]).
% [1,2,3,4,5]
OrderedSetB = ordsets:from_list([1, 1, 2, 3, 5, 8, 13]).
% [1,2,3,5,8,13]
OrderedSetC = ordsets:from_list([2, -2, 4, -4, 16, -16]).
% [-16,-4,-2,2,4,16]
EmptySet = ordsets:new().
% []
ordsets:subtract(OrderedSetA, OrderedSetB).
% [4]
ordsets:subtract(OrderedSetA, EmptySet).
% [1,2,3,4,5]
ordsets:subtract(OrderedSetB, EmptySet).
% [1,2,3,5,8,13]
ordsets:subtract(EmptySet, OrderedSetA).
% []
ordsets:subtract(OrderedSetB, OrderedSetC).
% [1,3,5,8,13]

请注意,ordsets:subtract/2 的入参顺序是不可换的,这一点和 ordsets:union/2 或者 ordsets:intersection/2 不一样。

1
2
3
4
ordsets:subtract(OrderedSetA, OrderedSetC).
% [1,3,5]
ordsets:subtract(OrderedSetC, OrderedSetA).
% [-16,-4,-2,16]

如果你不是一直跟读Erlang Thursday的话,我再次友情提醒你,虽然Erlang用列表来表示有序集合,但是并不意味着列表是有序集合。

原文链接: https://www.proctor-it.com/erlang-thursday-ordsets-subtract-2/