我需要在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中是否有标准/推荐的方法?
答案 0 :(得分:2)
Map提供普通函数不具备的功能。例如,您可以枚举/扫描/遍历/过滤现有的键和值。映射/缩小/转换等(尽管其他答案表明,您可以使用默认值或在丢失的键上生成错误。)
如果您不需要其中任何一项,则没有太大区别......除非条目数量相当大,否则访问Map
通常比评估静态模式更快。
答案 1 :(得分:1)
不是真的。这取决于目的。这是一个生成密钥的版本:
List("zero", "one", "two", "three").zipWithIndex.map(_.swap).toMap
(仍然是地图,假设您可以使用索引)
我已经看到根据上下文使用这两种方法。
如果您需要序列化地图或传递它或保留不同版本,地图会更好。
否则,模式匹配可能会更好。