Scala中是否缺少Multisets?

red*_*acs 8 scala set multiset

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

axe*_*l22 7

multiset有时候非常有用.我经常发现自己Map[K, List[V]]手动编码.BagNicolas Stucki 称其为多重集群,并在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

  • 我想知道你为什么要实现一个 `Map[K, List[V]`。@Steve 在对已接受答案的评论中提到的 `Map[T, Int]` 对我来说更有意义。 (2认同)
  • 取决于您的用例 - 有时您的元素根据“equals”是相等的,但有您想要保留的额外信息。 (2认同)

Dan*_*ral 1

多重集是一种相当奇特且不常见的数据结构。例如,它也不是 Java 标准库的一部分。Guava 确实有,Boost 也有,但 Boost 基本上什么都有。

如果您只想计算元素出现的次数,则可以使用SortedMapfrom 元素来进行计数。另一方面,如果您要求元素是不同的、可检索的,但在排序规则下是等效的,则可以使用 fromSortedMap元素(不重要是哪个)到 a Setof 可区分元素。

  • 我不同意“多重集是一种相当奇特且不常见的数据结构”。如果您正在执行诸如计算单词数或制作事物直方图之类的操作,则多重集是一种极其常见的数据结构。 (30认同)
  • [Python 的标准库](http://docs.python.org/2/library/collections.html#collections.Counter) 和 [C++ 的标准库](http://gcc.gnu .org/onlinedocs/libstdc++/libstdc++-html-USERS-4.3/a01117.html),以及 Java 集合库的两个非常常见的扩展,[Apache commons](http://commons.apache.org/collections/ apidocs/org/apache/commons/collections/Bag.html) 和 [Guava](http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/collect/Multiset.html)。鉴于此,我只是不明白你怎么能声称它是“奇特且不常见”的。 (6认同)
  • 也许您可以评论一下您认为的区别是什么?根据[正式定义](http://en.wikipedia.org/wiki/Multiset#Formal_definition),多重集本质上是一个“Map[T, Int]”,而这正是Python所提供的。 (2认同)