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