列表和地图订购

Pin*_*ton 1 scala list map tolist

在Scala中,如果我们List[(Char, Int)]按每对的第一个元素排序,是否通过toMap保留顺序转换为地图?

如果是这样,是否通过toList保留顺序将生成的地图转换回列表?

Kul*_*mpa 5

不,Map(和Set)不排序。您可以使用Scala的交互式解释器(REPL)进行检查:

scala> val elems = List('a'->1, 'b'->2, 'c'->3, 'd'->4, 'e'->5)
elems: List[(Char, Int)] = List((a,1), (b,2), (c,3), (d,4), (e,5))

scala> elems.toMap.toList
res8: List[(Char, Int)] = List((e,5), (a,1), (b,2), (c,3), (d,4))
Run Code Online (Sandbox Code Playgroud)

但是,scala.collection确实提供了SortedMap,这可能是您要查找的内容,尽管我尚未使用此实现。


编辑:实际上,这种转换还有一个更根本的问题:因为您不能在地图中有重复的键,所以您不仅在顺序上失去了保证,而且转换后列表中的元素可能更少。考虑一下:

scala> val elems = List('a'->1, 'a'->2)
elems: List[(Char, Int)] = List((a,1), (a,2))

scala> elems.toMap.toList
res9: List[(Char, Int)] = List((a,2))
Run Code Online (Sandbox Code Playgroud)