Scala中是否缺少Multisets?

时间:2013-01-31 01:32:09

标签: scala set multiset

我正在尝试Scala中的Facebook Hacker Cup 2013资格问题,对于第三个问题,我觉得需要一个有序的Multiset,但在scala的(2.10)集合中找不到。 scala的集合中是否缺少此数据结构。它将在未来版本中实施吗?如果已经实现了集合,那么Multiset是否真的没必要?

5 个答案:

答案 0 :(得分:7)

有时,多重集可能非常有用。我经常发现自己手动编码Map[K, List[V]]。尼古拉斯·斯塔基(Nicolas Stucki)有一个名为Bag的多重集合,并在Maven上发布。

在此宣布:

  

https://groups.google.com/forum/#!topic/scala-internals/ceaEAiQPgK4

代码在这里:

  

https://github.com/nicolasstucki/multisets

的Maven:

  

https://github.com/nicolasstucki/multisets/blob/master/MavenRepository.md

答案 1 :(得分:2)

multiset是一种相当奇特且不常见的数据结构。例如,它不是Java标准库的一部分。 Guava确实有一个,Boost也是如此,但Boost几乎拥有一切。

如果你想要的只是计算元素的出现次数,你可以求助于来自元素的SortedMap来计算。另一方面,如果您要求元素是不同的,可检索的,但在排序规则下是等效的,您可以使用SortedMap from元素(不重要哪一个)到Set的区分元件。

答案 2 :(得分:2)

Seq特质包含diffintersect甚至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)

https://github.com/scala/scala-collection-contrib

中提供了可变和不可变多重集