js数据结构之集合的详细实现方法

数据结构中的集合,类似于数学中常说的集合,是一类数据的群组。集合与集合之间还存在交集,并集,补集的运算。

 

***集合为无序,集合内元素不重复
***js的set基于数组, 使用SetClass为类名,区别于ES6
 
 
集合的实现方法如下:
function SetClass () {
    this.dataList = [];

    this.add = function (data) {
        if (this.dataList.indexOf(data)<0) {
            this.dataList.push(data);
            return true;
        }
        return false;
    };

    this.remove = function (data) {
        var index = this.dataList.indexOf(data);
        if (index > -1) {
            this.dataList.splice(index, 1);
            return true;
        }
        return false;
    };

    this.size = function () {
        return this.dataList.length;
    };

    this.show = function () {
        return this.dataList;
    };

    this.contains = function (data) {
        if (this.dataList.indexOf(data)!=-1) {
            return true;
        }
        return false;
    };
    // 并集
    this.union = function (targetSet) {
        var tempSet = new SetClass();
        targetSet.show().forEach(function (item, i) {
            tempSet.add(item);
        });

        this.dataList.forEach(function (item, i) {
            if (!tempSet.contains(item)) {
                tempSet.add(item);
            }
        });
        return tempSet;
    };
    // 交集
    this.intersect = function (targetSet) {
        var tempSet = new SetClass();
        this.dataList.forEach(function (item, i) {
            if (targetSet.contains(item)) {
                tempSet.add(item);
            }
        });
        return tempSet;
    };
    // 判断当前集合是否是目标集合的子集
    this.subset = function (targetSet) {
        if (this.size() > targetSet.size()) return false;
        this.dataList.forEach(function (item, i) {
            if (!targetSet.contains(item)) {
                return false;
            }
        }); 
        return true;
    };
    // 补集:targetSet中不存在,this.dataList中存在
    this.difference = function (targetSet) {
        var tempSet = new SetClass();
        this.dataList.forEach(function (item, i) {
            if (!targetSet.contains(item)) {
                tempSet.add(item);
            }
        });
        return tempSet;
    };
}

集合的使用方法如下:

var testSet = new SetClass();
var testSet2 = new SetClass();
var testSet3 = new SetClass();
testSet.add("a");
testSet.add("b");
testSet.add("c");
testSet.add("d");
testSet.add("e");
testSet2.add("d");
testSet2.add("e");
testSet2.add("f");
testSet2.add("g");
testSet2.add("h");
testSet3.add("a");
testSet3.add("b");

console.log(testSet.difference(testSet3));

 

posted @ 2018-08-14 22:18  TateWang  阅读(284)  评论(0编辑  收藏  举报
Top