Cocos2d-JS 实现Map Vector

/**
 * Map
 * Created by Lovell on 16/6/20.
 */

pg.Map = cc.Class.extend({
    _elements : null
});

/**
 * 创建Map
 * @returns {*}
 */
pg.Map.create = function ()
{
    var res = new pg.Map();
    res.clear();
    return res;
};

/**
 * Map元素的长度
 * @returns {*}
 */
pg.Map.prototype.size = function () {
    return this._elements.length;
};

/**
 * 判断Map是否为空
 * @returns {boolean}
 */
pg.Map.prototype.isEmpty = function () {
    return (this._elements.length < 1);
};

pg.Map.prototype.clear = function () {
    this._elements = [];
};

/**
 * 向Map中增加元素
 * @param key
 * @param value
 */
pg.Map.prototype.put = function (key, value) {
    if (this.containKey(key)) {
        this.remove(key);
    }
    this._elements.push({
        key: key,
        value: value
    });
};

/**
 * 向Map中插入元素
 * @param index
 * @param key
 * @param value
 */
pg.Map.prototype.insert = function (index, key, value) {
    if (this.containKey(key)) {
        this.remove(key);
    }
    this._elements.splice(index,0,{
        key: key,
        value: value
    });
};

/**
 * 删除指定Key的元素
 * @param key
 * @returns {boolean}
 */
pg.Map.prototype.remove = function (key) {
    var ret = false;
    try {
        for (var i=0; i<this._elements.length; i++) {
            if (this._elements[i].key == key)
            {
                this._elements.splice(i, 1);
                return true;
            }
        }
    } catch (e) {
        ret = false;
    }
    return ret;
};

/**
 * 获取指定Key的元素值Value,失败返回NULL
 * @param key
 * @returns {*}
 */
pg.Map.prototype.get = function (key) {
    try {
        for (var i = 0; i < this._elements.length; i++) {
            if (this._elements[i].key == key) {
                return this._elements[i].value;
            }
        }
    } catch (e) {
        return null;
    }
};

/**
 * 设置指定Key的元素值Value,失败返回FALSE
 * @param key
 * @param value
 * @returns {boolean}
 */
pg.Map.prototype.set = function (key, value) {
    try {
        for (var i = 0; i < this._elements.length; i++) {
            if (this._elements[i].key == key) {
                this._elements[i].value = value;
                return true;
            }
        }
    } catch (e) {
        return false;
    }
};

/**
 * 通过Index获取对应的Value
 * @param index
 * @returns {*}
 */
pg.Map.prototype.getValueByIndex = function (index) {
    return this._elements[index].value;
};

/**
 * 通过Key获取对应的Index
 * @param key
 * @returns {number}
 */
pg.Map.prototype.getIndexByKey = function (key) {
    try {
        for (i = 0; i < this._elements.length; i++) {
            if (this._elements[i].key == key) {
                return i;
            }
        }
    } catch (e) {
        return -1;
    }
};

/**
 * 通过Index获得Key
 * @param index
 * @returns {*}
 */
pg.Map.prototype.getKeyByIndex = function (index) {
    return this._elements[index].key;
};

pg.Map.prototype.removeByIndex = function (index) {
    this.remove(this._elements[index].key);
};

/**
 * 获取指定索引的元素
 * @param index
 * @returns {*}
 */
pg.Map.prototype.element = function (index) {
    if (index < 0 || index >= this._elements.length) {
        return null;
    }
    return this._elements[index];
};

/**
 * 判断Map中是否含有指定KEY的元素
 * @param key
 * @returns {boolean}
 */
pg.Map.prototype.containKey = function (key) {
    var ret = false;
    try {
        for (var i = 0; i < this._elements.length; i++) {
            if (this._elements[i].key == key) {
                ret = true;
            }
        }
    } catch (e) {
        ret = false;
    }
    return ret;
};

/**
 * 判断Map中是否含有指定VALUE的元素
 * @param value
 * @returns {boolean}
 */
pg.Map.prototype.containValue = function (value) {
    var ret = false;
    try {
        for (var i = 0; i < this._elements.length; i++) {
            if (this._elements[i].value == value) {
                ret = true;
            }
        }
    } catch (e) {
        ret = false;
    }
    return ret;
};

/**
 * 获取Map中所有VALUE的数组
 * @returns {Array}
 */
pg.Map.prototype.values = function () {
    var arr = [];
    for (var i = 0; i < this._elements.length; i++) {
        arr.push(this._elements[i].value);
    }
    return arr;
};

/**
 * 获取Map中所有KEY的数组
 * @returns {Array}
 */
pg.Map.prototype.keys = function () {
    var arr = [];
    for (var i = 0; i < this._elements.length; i++) {
        arr.push(this._elements[i].key);
    }
    return arr;
};



/**************************************************************************************************************************************************************************************
 * Created by Lovell on 8/1/16.
 */
pg.Vector = cc.Class.extend({
    _array: null
});

pg.Vector.create = function () {
    var res = new pg.Vector();
    if (res.init()) {
        return res;
    }
    res = null;
    return null;
};

pg.Vector.prototype.init = function () {
    this._array = [];
    return true;
};

pg.Vector.prototype.push = function (obj) {
    this._array.push(obj);
};

pg.Vector.prototype.at = function (index) {
    if (index < 0 || index >= this._array.length) {
        return null;
    }
    return this._array[index];
};

pg.Vector.prototype.erase = function (obj) {
    for (var i = 0; i < this._array.length; i++) {
        if (this._array[i] == obj) {
            this._array.splice(i, 1);
            break;
        }
    }
};

pg.Vector.prototype.eraseAt = function (index) {
    this._array.splice(index, 1);
};

pg.Vector.prototype.contains = function (obj) {
    for (var i = 0; i < this._array.length; i++) {
        if (this._array[i] == obj) {
            return true;
        }
    }
    return false;
};

pg.Vector.prototype.size = function () {
    return this._array.length;
};

pg.Vector.prototype.insert = function (index, obj) {
    this._array.splice(index, 0, obj);
};

pg.Vector.prototype.clear = function () {
    this._array.length = 0;
};
相关文章
相关标签/搜索