不可变的Scala Map实现,保留插入顺序 [英] Immutable Scala Map implementation that preserves insertion order
本文介绍了不可变的Scala Map实现,保留插入顺序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
LinkedHashMap
用于在地图中保留插入顺序,但这仅适用于可变地图。
LinkedHashMap
is used to preserve insertion order in the map, but this only works for mutable maps. Which is the immutable Map
implementation that preserves insertion order?
推荐答案
a href =http://www.scala-lang.org/api/current/scala/collection/immutable/ListMap.html =noreferrer> ListMap 使用基于列表的方式实现不可变的地图数据结构,从而保留插入顺序。
ListMap implements an immutable map using a list-based data structure, and thus preserves insertion order.
scala> import collection.immutable.ListMap
import collection.immutable.ListMap
scala> ListMap(1 -> 2) + (3 -> 4)
res31: scala.collection.immutable.ListMap[Int,Int] = Map(1 -> 2, 3 -> 4)
scala> res31 + (6 -> 9)
res32: scala.collection.immutable.ListMap[Int,Int] = Map(1 -> 2, 3 -> 4, 6 -> 9)
以下扩展方法 - Seq#toListMap
可以是在使用 ListMap
s时非常有用。
The following extension method - Seq#toListMap
can be quite useful when working with ListMap
s.
scala> import scalaz._, Scalaz._, Liskov._
import scalaz._
import Scalaz._
import Liskov._
scala> :paste
// Entering paste mode (ctrl-D to finish)
implicit def seqW[A](xs: Seq[A]) = new SeqW(xs)
class SeqW[A](xs: Seq[A]) {
def toListMap[B, C](implicit ev: A <~< (B, C)): ListMap[B, C] = {
ListMap(co[Seq, A, (B, C)](ev)(xs) : _*)
}
}
// Exiting paste mode, now interpreting.
seqW: [A](xs: Seq[A])SeqW[A]
defined class SeqW
scala> Seq((2, 4), (11, 89)).toListMap
res33: scala.collection.immutable.ListMap[Int,Int] = Map(2 -> 4, 11 -> 89)
这篇关于不可变的Scala Map实现,保留插入顺序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文