2016-03-30 60 views
2

我需要在scala中聲明一個常量映射,並且指定什麼纔是正確的方法。 Java的方式是斯卡拉風格:恆定的地圖與模式匹配

private static final String[] numbers = {"zero","one","two","three"} //Java 
val numbers = Array("zero","one","two","three") //Scala 
val numbers = collection.immutable.HashMap(0 -> "zero", 1 -> "one", 2 => "two") //Scala maps 

另一種方法是,在Scala是

def array(i: Int) = i match { 
    case 0 => "zero" 
    case 1 => "one" 
    case 2 => "two" 
} 

是否有一個標準的/推薦的方式做到這一點在Scala呢?

回答

1

不是。這取決於目的。下面是生成密鑰的版本:

List("zero", "one", "two", "three").zipWithIndex.map(_.swap).toMap 

(仍然是一個地圖,假設你可以使用索引)

我已經看到了這兩種方法,根據使用的環境。

如果您需要序列化映射或傳遞它或保留它的不同版本,地圖會更好。

否則,模式匹配可能會更好。

+0

你的代碼以另一種方式生成Map(String-> Int)。 OP希望Int-> String。 –

+0

@TheArchetypalPaul你是對的,我錯過了。我更新了代碼以糾正錯誤。 –

2

Map提供了普通函數不提供的功能。例如,您可以枚舉/掃描/遍歷/過濾現有的鍵和值。地圖/縮小/轉換等(你可以有一個默認值或者在丟失的鍵上也產生一個錯誤,儘管其他答案建議)。

如果您不需要這些,那麼沒有太大的區別......除非條目數量相當大,否則訪問Map通常會比評估靜態模式更快。