【问题标题】: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 - 未经测试。

标签: data-structures clojure


【解决方案1】:

值到“计数”的映射? (删除一个值会减少计数器?)

【讨论】:

  • 谢谢!但是有没有直观的方法呢?
  • 不确定您所说的“直观”是什么意思;默认情况下不支持此数据结构,因此您必须“包装”一个标准哈希映射,并编写您自己的包含/添加/删除函数。这似乎是在@Thumbnail 提到的多集库中完成的。
  • 刚才看了一下github上的multiset。你是对的......我对clojure编程的经验很少,我认为这个解决方案似乎是最可行的。无论如何,谢谢你的解释!
猜你喜欢
  • 2013-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-22
  • 1970-01-01
  • 2011-06-17
  • 2011-08-06
  • 1970-01-01
相关资源
最近更新 更多