The OpenD Programming Language

setDifference

Lazily computes the difference of r1 and r2. The two ranges are assumed to be sorted by less. The element types of the two ranges must have a common type.

More...
SetDifference!(less, R1, R2)
setDifference
(
alias less = "a < b"
R1
R2
)
(
R1 r1
,
R2 r2
)

Parameters

less

Predicate the given ranges are sorted by.

r1 R1

The first range.

r2 R2

The range to subtract from r1.

Return Value

Type: SetDifference!(less, R1, R2)

A range of the difference of r1 and r2.

Detailed Description

In the case of multisets, considering that element a appears x times in r1 and y times and r2, the number of occurences of a in the resulting range is going to be x-y if x > y or 0 otherwise.

Examples

import std.algorithm.comparison : equal;
import std.range.primitives : isForwardRange;

//sets
int[] a = [ 1, 2, 4, 5, 7, 9 ];
int[] b = [ 0, 1, 2, 4, 7, 8 ];
assert(equal(setDifference(a, b), [5, 9]));
static assert(isForwardRange!(typeof(setDifference(a, b))));

// multisets
int[] x = [1, 1, 1, 2, 3];
int[] y = [1, 1, 2, 4, 5];
auto r = setDifference(x, y);
assert(equal(r, [1, 3]));
assert(setDifference(r, x).empty);

See Also

Meta