Scala-根据键从地图读取值

时间:2018-03-19 07:17:34

标签: scala

如果我在地图中有更多的键,是否有更好的方法可以根据键从地图中读取值?

目前我有一个 Map [String,List [String]] ,可以有超过 20个键

我在下面使用它来检索每个键的值

val names= map.getOrElse("Name", List.empty)
.
.
.
val cities = map.getOrElse("City", List.Empty)

请帮助如果我能以更好的方式写出来。

1 个答案:

答案 0 :(得分:3)

我非常怀疑你通过将Map数据复制到局部变量来为自己做任何好处。

您可以做的一件事是使用模式匹配来保存一些(不多)输入。

val knownKeys = List("Name", "City", "Country") // etc. etc.

val List(names
        ,cities
        ,countries
        // etc. etc.
        ) = knownKeys.map(data.getOrElse(_, List()))

这个想法的一个主要缺点是密钥列表必须与提取中变量的顺序完全相同。

更好的想法是让您的Map拥有自己的默认值。

val data = Map("City" -> List("NY","Rome")
              ,"Name" -> List("Ed","Al")
              // etc. etc.
              ).withDefaultValue(List.empty[String])

然后你不需要.getOrElse()

data("City")     // res0: List[String] = List(NY, Rome)
data("Airport")  // res1: List[String] = List()