Scala样式:常量映射与模式匹配

时间:2016-03-30 22:58:24

标签: scala

我需要在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中是否有标准/推荐的方法?

2 个答案:

答案 0 :(得分:2)

Map提供普通函数不具备的功能。例如,您可以枚举/扫描/遍历/过滤现有的键和值。映射/缩小/转换等(尽管其他答案表明,您可以使用默认值或在丢失的键上生成错误。)

如果您不需要其中任何一项,则没有太大区别......除非条目数量相当大,否则访问Map通常比评估静态模式更快。

答案 1 :(得分:1)

不是真的。这取决于目的。这是一个生成密钥的版本:

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

(仍然是地图,假设您可以使用索引)

我已经看到根据上下文使用这两种方法。

如果您需要序列化地图或传递它或保留不同版本,地图会更好。

否则,模式匹配可能会更好。