JavaScript 中是否有类似 multiset 的东西?

6
我知道JavaScript现在有集合(set),但我想知道是否有实现多重集合(multiSet)功能的方法,或者是否有一些框架具有我非常需要的multiset函数。

否则,我必须自己编写代码来研究红黑树(Red-Black Tree)


4
@jfriend00,正是这个搜索结果将我带到了这里,按照您的指示做会创建一个无限循环 :-) - Konrad Höffner
你不需要红黑树,你可能会用到的是排序列表、二分搜索以及合并排序列表的操作符。 - Justin Meiners
3个回答

3

2

您可以使用内置的map类型和数值来构建自己的多重集合:

class Multiset {
    _backing = new Map();
    add(value) {
        if (this._backing.has(value)) {
            this._backing.set(value, 1 + this._backing.get(value));
        } else {
            this._backing.set(value, 1);
        }
    }

    delete(value) {
        if (this._backing.get(value) > 0) {
            this._backing.set(value, this._backing.get(value) - 1);
        } else {
            //do nothing
        }
    }

    get(value) {
        if (this._backing.get(value) > 0) {
            return this._backing.get(value);
        } else {
            return 0;
        }
    }
}

1

这是一个旧问题,但它排在了我的搜索结果的最顶部。我最终使用了lodash(类似于underscore): 例如,

_.countBy([1, 2, 1, 4, 4, 1])

提供结果

{ '1': 3, '2': 1, '4': 2 }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接