RosettaCodeData/Task/Set/D/set-1.d

22 lines
820 B
D

void main() {
import std.stdio, std.algorithm, std.range;
// Not true sets, items can be repeated, but must be sorted.
auto s1 = [1, 2, 3, 4, 5, 6].assumeSorted;
auto s2 = [2, 5, 6, 3, 4, 8].sort(); // [2,3,4,5,6,8].
auto s3 = [1, 2, 5].assumeSorted;
assert(s1.canFind(4)); // Linear search.
assert(s1.contains(4)); // Binary search.
assert(s1.setUnion(s2).equal([1,2,2,3,3,4,4,5,5,6,6,8]));
assert(s1.setIntersection(s2).equal([2, 3, 4, 5, 6]));
assert(s1.setDifference(s2).equal([1]));
assert(s1.setSymmetricDifference(s2).equal([1, 8]));
assert(s3.setDifference(s1).empty); // It's a subset.
assert(!s1.equal(s2));
auto s4 = [[1, 4, 7, 8], [1, 7], [1, 7, 8], [4], [7]];
const s5 = [1, 1, 1, 4, 4, 7, 7, 7, 7, 8, 8];
assert(s4.nWayUnion.equal(s5));
}