JavaScript中有像multiset这样的东西吗?

Is there something like mulitiSet in JavaScript?

本文关键字:multiset JavaScript      更新时间:2023-09-26

我知道JavaScript现在有集合,但我想知道是否有一些东西来实现multiSet的功能,或者如果有一些框架,有multiSet的功能,我真的很需要。

或者我必须自己编码来研究红黑树?

没有内置的多集结构,但有一些库有这样的:

  • 助记器→MultiSet
  • tstl→ TreeMultiSet

请在此问题中添加您最喜欢的库。

您可以使用内置映射类型和数值构建自己的multiset:

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;
        }
    }
}

这是一个老问题,但它出现在我的搜索顶部。我最终使用lodash(类似于下划线):例如,

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

给出结果

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