我正在尝试Scala中的Facebook Hacker Cup 2013资格问题,对于第三个问题,我觉得需要一个有序的Multiset,但在scala的(2.10)集合中找不到。 scala的集合中是否缺少此数据结构。它将在未来版本中实施吗?如果已经实现了集合,那么Multiset是否真的没必要?
答案 0 :(得分:7)
有时,多重集可能非常有用。我经常发现自己手动编码Map[K, List[V]]
。尼古拉斯·斯塔基(Nicolas Stucki)有一个名为Bag
的多重集合,并在Maven上发布。
在此宣布:
https://groups.google.com/forum/#!topic/scala-internals/ceaEAiQPgK4
代码在这里:
的Maven:
https://github.com/nicolasstucki/multisets/blob/master/MavenRepository.md
答案 1 :(得分:2)
multiset是一种相当奇特且不常见的数据结构。例如,它不是Java标准库的一部分。 Guava确实有一个,Boost也是如此,但Boost几乎拥有一切。
如果你想要的只是计算元素的出现次数,你可以求助于来自元素的SortedMap
来计算。另一方面,如果您要求元素是不同的,可检索的,但在排序规则下是等效的,您可以使用SortedMap
from元素(不重要哪一个)到Set
的区分元件。
答案 2 :(得分:2)
Seq
特质包含diff
,intersect
甚至union
。这应该会帮助你解决很多你的多重问题。 http://www.scala-lang.org/api/2.11.7/index.html#scala.collection.Seq@diff(that:Seq[A]):Seq[A]
答案 3 :(得分:0)
如果您需要的只是平等而且您不太关心性能,那么您可以使用排序列表。
答案 4 :(得分:0)