Search documentation of stdlib

# ordsets (stdlib v6.2.2)

View Source

Functions for manipulating sets as ordered lists.

Sets are collections of elements with no duplicate elements. An `ordset` is a representation of a set, where an ordered list is used to store the elements of the set. An ordered list is more efficient than an unordered list. Elements are ordered according to the Erlang term order.

This module provides the same interface as the `sets` module but with a defined representation. One difference is that while `sets` considers two elements as different if they do not match (`=:=`), this module considers two elements as different if and only if they do not compare equal (`==`).

See the Compatibility Section in the `sets` module for more information about the compatibility of the different implementations of sets in the Standard Library.

## See Also

`gb_sets`, `sets`

# Summary

## Types

ordset(T)

As returned by `new/0`.

## Functions

add_element(Element, Ordset1)

Returns a new ordered set formed from `Ordset1` with `Element` inserted.

del_element(Element, Ordset1)

Returns `Ordset1`, but with `Element` removed.

filter(Pred, Ordset1)

Filters elements in `Ordset1` with boolean function `Pred`.

filtermap(Fun, Ordset1)

Filters and maps elements in `Ordset1` with function `Fun`.

fold(Function, Acc0, Ordset)

Folds `Function` over every element in `Ordset` and returns the final value of the accumulator.

from_list(List)

Returns an ordered set of the elements in `List`.

intersection(OrdsetList)

Returns the intersection of the non-empty list of sets.

intersection(Ordset1, Ordset2)

Returns the intersection of `Ordset1` and `Ordset2`.

is_disjoint(Ordset1, Ordset2)

Returns `true` if `Ordset1` and `Ordset2` are disjoint (have no elements in common), otherwise `false`.

is_element(Element, Ordset)

Returns `true` if `Element` is an element of `Ordset`, otherwise `false`.

is_empty(Ordset)

Returns `true` if `Ordset` is an empty set, otherwise `false`.

is_equal(Ordset1, Ordset2)

Returns `true` if `Ordset1` and `Ordset2` are equal, that is when every element of one set is also a member of the respective other set, otherwise `false`.

is_set(Ordset)

Returns `true` if `Ordset` is an ordered set of elements, otherwise `false`. This function will return `true` for any ordered list, even when not constructed by the functions in this module.

is_subset(Ordset1, Ordset2)

Returns `true` when every element of `Ordset1` is also a member of `Ordset2`, otherwise `false`.

map(Fun, Ordset1)

Maps elements in `Ordset1` with mapping function `Fun`.

new()

Returns a new empty ordered set.

size(Ordset)

Returns the number of elements in `Ordset`.

subtract(Ordset1, Ordset2)

Returns only the elements of `Ordset1` that are not also elements of `Ordset2`.

to_list(Ordset)

Returns the elements of `Ordset` as a list.

union(OrdsetList)

Returns the merged (union) set of the list of sets.

union(Ordset1, Ordset2)

Returns the merged (union) set of `Ordset1` and `Ordset2`.

# Types

# ordset(T)

    -type ordset(T) :: [T].

As returned by `new/0`.

# Functions

# add_element(Element, Ordset1)

    -spec add_element(Element, Ordset1) -> Ordset2
                         when Element :: E, Ordset1 :: ordset(T), Ordset2 :: ordset(T | E).

Returns a new ordered set formed from `Ordset1` with `Element` inserted.

# del_element(Element, Ordset1)

    -spec del_element(Element, Ordset1) -> Ordset2
                         when Element :: term(), Ordset1 :: ordset(T), Ordset2 :: ordset(T).

Returns `Ordset1`, but with `Element` removed.

# filter(Pred, Ordset1)

    -spec filter(Pred, Ordset1) -> Ordset2
                    when
                        Pred :: fun((Element :: T) -> boolean()), Ordset1 :: ordset(T), Ordset2 :: ordset(T).

Filters elements in `Ordset1` with boolean function `Pred`.

# filtermap(Fun, Ordset1)

(since OTP 27.0)

    -spec filtermap(Fun, Ordset1) -> Ordset2
                       when
                           Fun :: fun((Element1 :: T1) -> boolean | {true, Element2 :: T2}),
                           Ordset1 :: ordset(T1),
                           Ordset2 :: ordset(T1 | T2).

Filters and maps elements in `Ordset1` with function `Fun`.

# fold(Function, Acc0, Ordset)

    -spec fold(Function, Acc0, Ordset) -> Acc1
                  when
                      Function :: fun((Element :: T, AccIn :: term()) -> AccOut :: term()),
                      Ordset :: ordset(T),
                      Acc0 :: term(),
                      Acc1 :: term().

Folds `Function` over every element in `Ordset` and returns the final value of the accumulator.

# from_list(List)

    -spec from_list(List) -> Ordset when List :: [T], Ordset :: ordset(T).

Returns an ordered set of the elements in `List`.

# intersection(OrdsetList)

    -spec intersection(OrdsetList) -> Ordset when OrdsetList :: [ordset(_), ...], Ordset :: ordset(_).

Returns the intersection of the non-empty list of sets.

# intersection(Ordset1, Ordset2)

    -spec intersection(Ordset1, Ordset2) -> Ordset3
                          when Ordset1 :: ordset(_), Ordset2 :: ordset(_), Ordset3 :: ordset(_).

Returns the intersection of `Ordset1` and `Ordset2`.

# is_disjoint(Ordset1, Ordset2)

    -spec is_disjoint(Ordset1, Ordset2) -> boolean() when Ordset1 :: ordset(_), Ordset2 :: ordset(_).

Returns `true` if `Ordset1` and `Ordset2` are disjoint (have no elements in common), otherwise `false`.

# is_element(Element, Ordset)

    -spec is_element(Element, Ordset) -> boolean() when Element :: term(), Ordset :: ordset(_).

Returns `true` if `Element` is an element of `Ordset`, otherwise `false`.

# is_empty(Ordset)

(since OTP 21.0)

    -spec is_empty(Ordset) -> boolean() when Ordset :: ordset(_).

Returns `true` if `Ordset` is an empty set, otherwise `false`.

# is_equal(Ordset1, Ordset2)

(since OTP 27.0)

    -spec is_equal(Ordset1, Ordset2) -> boolean() when Ordset1 :: ordset(_), Ordset2 :: ordset(_).

Returns `true` if `Ordset1` and `Ordset2` are equal, that is when every element of one set is also a member of the respective other set, otherwise `false`.

# is_set(Ordset)

    -spec is_set(Ordset) -> boolean() when Ordset :: term().

Returns `true` if `Ordset` is an ordered set of elements, otherwise `false`. This function will return `true` for any ordered list, even when not constructed by the functions in this module.

# is_subset(Ordset1, Ordset2)

    -spec is_subset(Ordset1, Ordset2) -> boolean() when Ordset1 :: ordset(_), Ordset2 :: ordset(_).

Returns `true` when every element of `Ordset1` is also a member of `Ordset2`, otherwise `false`.

# map(Fun, Ordset1)

(since OTP 27.0)

    -spec map(Fun, Ordset1) -> Ordset2
                 when
                     Fun :: fun((Element1 :: T1) -> Element2 :: T2),
                     Ordset1 :: ordset(T1),
                     Ordset2 :: ordset(T2).

Maps elements in `Ordset1` with mapping function `Fun`.

# new()

    -spec new() -> [].

Returns a new empty ordered set.

# size(Ordset)

    -spec size(Ordset) -> non_neg_integer() when Ordset :: ordset(_).

Returns the number of elements in `Ordset`.

# subtract(Ordset1, Ordset2)

    -spec subtract(Ordset1, Ordset2) -> Ordset3
                      when Ordset1 :: ordset(_), Ordset2 :: ordset(_), Ordset3 :: ordset(_).

Returns only the elements of `Ordset1` that are not also elements of `Ordset2`.

# to_list(Ordset)

    -spec to_list(Ordset) -> List when Ordset :: ordset(T), List :: [T].

Returns the elements of `Ordset` as a list.

# union(OrdsetList)

    -spec union(OrdsetList) -> Ordset when OrdsetList :: [ordset(T)], Ordset :: ordset(T).

Returns the merged (union) set of the list of sets.

# union(Ordset1, Ordset2)

    -spec union(Ordset1, Ordset2) -> Ordset3
                   when Ordset1 :: ordset(T1), Ordset2 :: ordset(T2), Ordset3 :: ordset(T1 | T2).

Returns the merged (union) set of `Ordset1` and `Ordset2`.