簡體   English   中英

使用Scala 2.10`to`將List轉換為SortedMap

[英]Using Scala 2.10 `to` to convert a List to a SortedMap

我想一個轉換scala.collection.immutable.List對上向scala.collection.immutable.SortedMap使用新to方法,從斯卡拉2.10,但我得到一個編譯時錯誤:

scala> List((1, "Fred"), (2, "Barney")).to[scala.collection.immutable.SortedMap]
<console>:10: error: scala.collection.immutable.SortedMap takes two type parameters, expected: one
              List((1, "Fred"), (2, "Barney")).to[SortedMap]
                                                  ^

可以使用to方法完成嗎? 我錯過了中間方法調用嗎?

我前一段時間遇到過類似的問題並提出了這個問題:

SortedMap( list: _*)

所以你可以這樣做:

val map =  SortedMap( List((1, "Fred"), (2, "Barney")): _*)

_*表示您將Seq s元素而不是Seq本身作為參數。

@gourlaysama已經解釋了為什么它不能編譯,@ Chirlo提供了最簡單(和推薦)的解決方法: SortedMap( list: _*)

我想提出一個替代方案:

import collection.Traversable
import collection.generic.CanBuildFrom
implicit class RichPairTraversable[A,B]( t: Traversable[(A,B)] ) {
  def toPairCol[Col[A,B]](implicit cbf: CanBuildFrom[Nothing, (A,B), Col[A, B]]): Col[A, B] = {
    val b = cbf()
    b.sizeHint(t)
    b ++= t
    b.result
  }  
}

在REPL中進行一些測試:

scala> List((1, "Fred"), (2, "Barney")).toPairCol[scala.collection.immutable.SortedMap]
res0: scala.collection.immutable.SortedMap[Int,String] = Map(1 -> Fred, 2 -> Barney)

scala> List((1, "Fred"), (2, "Barney")).toPairCol[scala.collection.immutable.HashMap]
res1: scala.collection.immutable.HashMap[Int,String] = Map(1 -> Fred, 2 -> Barney)

現在,我可能不會在生產中使用它,因為做SortedMap( list: _* )並不那么難,並且不需要魔法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM