在scala中从Iterator创建SortedMap

时间:2013-02-23 15:53:56

标签: scala collections sortedmap

我有一个val it:Iterator[(A,B)],我想创建一个SortedMap[A,B],其中包含我从Iterator中获取的元素。我现在的方式是:

val map = SortedMap[A,B]() ++ it

它工作正常,但使用感觉有点尴尬。我检查了SortedMap doc但找不到更优雅的东西。是否有类似的东西:

 it.toSortedMap 

SortedMap.from(it)

在标准的Scala库中,我可能错过了吗?

编辑:混合来自@ Rex答案的两个想法我想出了这个:

SortedMap(it.to:_*)

哪个工作正常,避免必须指定SortedMap的类型签名。虽然看起来仍然很有趣,但欢迎进一步的答案。

1 个答案:

答案 0 :(得分:5)

您正在寻找的功能确实适用于其他组合,但不适用于您想要的功能。如果您的集合只需要一个参数,则可以使用.to[NewColl]。所以,例如,

import collection.immutable._

Iterator(1,2,3).to[SortedSet]

此外,SortedMap伴随对象有一个varargs apply,可用于创建排序映射,如下所示:

SortedMap( List((1,"salmon"), (2,"herring")): _* )

(注意: _*,这意味着使用内容作为参数)。不幸的是,这需要Seq,而不是Iterator

所以你最好的选择就是你已经这样做了。