Scala可变MultiMap addBinding和插入顺序保存

时间:2014-09-26 20:20:23

标签: scala

似乎MultiMap的addBinding不保留绑定到同一个键的值的插入顺序,因为它使用的基础机制是H​​ashSet。使用MultiMap保留插入顺序的惯用方法是什么?

2 个答案:

答案 0 :(得分:6)

基于MultiMap执行状态:

/** Creates a new set.
*
*  Classes that use this trait as a mixin can override this method
*  to have the desired implementation of sets assigned to new keys.
*  By default this is `HashSet`.
*
*  @return An empty set of values of type `B`.
*/
protected def makeSet: Set[B] = new HashSet[B]

您可以简单地定义:

trait OrderedMultimap[A, B] extends MultiMap[A, B] {
    override def makeSet: Set[B] = new LinkedHashSet[B]
}

答案 1 :(得分:0)

一种方法可能是回退到常规Map(而不是MultiMap),使用值类型的集合,而该集合将是可以强制执行订单的集合类型(即不是Set)。据我了解,为了保持允许元素重复的更广泛意义上的插入顺序,要使用的自然Scala集合将是Seq实现(例如Vector或Queue,具体取决于访问模式)。