clojure 中是不是有支持重复元素和 O(1) 删除的内置数据结构?
Posted
技术标签:
【中文标题】clojure 中是不是有支持重复元素和 O(1) 删除的内置数据结构?【英文标题】:Is there built-in data structure in clojure supporting both duplicated elements and O(1) removing?clojure 中是否有支持重复元素和 O(1) 删除的内置数据结构? 【发布时间】:2014-09-22 09:15:47 【问题描述】:最近,我需要在 clojure 中实现一个特殊的集合,它可能有重复的元素(即多重集合),比如
#1 2 3 4 1 2
此外,还需要在 O(1) 时间内删除等于指定值的任意元素。例如,当我输入
(my-remove #1 1 2 2 3 4 2)
它应该返回#1 1 2 3 4
而不循环整个集合(或向量)。
我的问题是,clojure 中是否有满足这两个属性的内置数据结构。如果没有,是否有任何适当的替代解决方案来实现这一点?谢谢!
【问题讨论】:
Clojure 缺少标准的 multiset/bag。你可以试试this - 未经测试。 【参考方案1】:值到“计数”的映射? (删除一个值会减少计数器?)
【讨论】:
谢谢!但是有没有直观的方法呢? 不确定您所说的“直观”是什么意思;默认情况下不支持此数据结构,因此您必须“包装”一个标准哈希映射,并编写您自己的包含/添加/删除函数。这似乎是在@Thumbnail 提到的多集库中完成的。 刚才看了一下github上的multiset。你是对的......我对clojure编程的经验很少,我认为这个解决方案似乎是最可行的。无论如何,谢谢你的解释!以上是关于clojure 中是不是有支持重复元素和 O(1) 删除的内置数据结构?的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode 0381. O 时间插入删除和获取随机元素 - 允许重复