'use strict'; var flatten = require('../../utils/array').flatten; function factory (type, config, load, typed) { var equal = load(require('../relational/equal')); var index = load(require('../../type/matrix/MatrixIndex')); var matrix = load(require('../../type/matrix/DenseMatrix')); var size = load(require('../matrix/size')); var sort = load(require('../matrix/sort')); var subset = load(require('../matrix/subset')); /** * Collect the distinct elements of a multiset. * A multi-dimension array will be converted to a single-dimension array before the operation. * * Syntax: * * math.setDistinct(set) * * Examples: * * math.setDistinct([1, 1, 1, 2, 2, 3]); // returns [1, 2, 3] * * See also: * * setMultiplicity * * @param {Array | Matrix} a A multiset * @return {Array | Matrix} A set containing the distinc elements of the multiset */ var setDistinct = typed('setDistinct', { 'Array | Matrix': function (a) { if (subset(size(a), new index(0)) === 0) { // if empty, return empty var result = []; } else { var b = sort(flatten(Array.isArray(a) ? a : a.toArray()), 'natural'); var result = []; result.push(b[0]); for (var i=1; i