2017-09-26 150 views
1

建立一個階immutable.TreeMap到目前爲止,我可以,唯一的辦法是使用:尋找一種方式來從列表

var ans: TreeMap[Int, Int] = immutable.TreeMap(List(1,2,3).map(e => (e, e*2)): _*) 

1)是否有辦法做到這一點,而不使用可變參數_ *句法?

2)這種模式在scala中是一個很好的實踐嗎?

回答

1

有沒有辦法做到這一點,而不使用vararg _ *語法?

由於上TreeMapapply方法採用(A, B)*類型的可變參數,我沒有看到任何其他內置的方式

是這種模式在Scala中的好做法?

我不明白爲什麼它不會。

另一種方法是提供可以工作的toTreeMap地圖形式的擴展方法。

1

1)其他的方法是創建一個空的TreeMap中,再加入所有元素:

immutable.TreeMap.empty[Int, Int] ++ (List(1,2,3).map(e => (e, e*2))) 

我沒有強烈的感情有關哪種方式更好。

2)是的,這是相當普遍的。

+1

哈,我總是忘記你可以'++'列表地圖。 –

2

1)有沒有辦法做到這一點,而不使用vararg _ *語法?

是的,您可以使用breakOut參數map。注意,這需要對變量

import scala.collection.breakOut 
import scala.collection.immutable.TreeMap 

val ans: TreeMap[Int, Int] = List(1,2,3).map(e => (e, e*2))(breakOut) 

2顯式類型批註)是這種模式在Scala中的好做法?

直到在Scala 2.13中的集合允許你寫list.to(TreeMap),沒關係。我的意思是,這不是有更好的選擇,所以使用任何解決你的問題。

相關問題