setIntersection

Lazily computes the intersection of two or more input ranges ranges. The ranges are assumed to be sorted by less. The element types of the ranges must have a common type.

In the case of multisets, the range with the minimum number of occurences of a given element, propagates the number of occurences of this element to the resulting range.

SetIntersection!(less, Rs)
setIntersection
(
alias less = "a < b"
Rs...
)
()
if (
Rs.length >= 2 &&
&&
!is(CommonType!(staticMap!(ElementType, Rs)) == void)
)

Parameters

less

Predicate the given ranges are sorted by.

ranges Rs

The ranges to compute the intersection for.

Return Value

Type: SetIntersection!(less, Rs)

A range containing the intersection of the given ranges.

Examples

import std.algorithm.comparison : equal;

// sets
int[] a = [ 1, 2, 4, 5, 7, 9 ];
int[] b = [ 0, 1, 2, 4, 7, 8 ];
int[] c = [ 0, 1, 4, 5, 7, 8 ];
assert(equal(setIntersection(a, a), a));
assert(equal(setIntersection(a, b), [1, 2, 4, 7]));
assert(equal(setIntersection(a, b, c), [1, 4, 7]));

// multisets
int[] d = [ 1, 1, 2, 2, 7, 7 ];
int[] e = [ 1, 1, 1, 7];
assert(equal(setIntersection(a, d), [1, 2, 7]));
assert(equal(setIntersection(d, e), [1, 1, 7]));

Meta