scala将字符串列表转换为键/值映射

时间:2014-08-12 15:37:46

标签: scala scala-collections

我有一个从外部系统导入的有序字符串数组,其格式为:

val l = List("key1", "val1", "key2", "val2", etc...)

将scala转换为地图的scala方法是什么?我可以迭代密钥并获取相关的val?

THX

3 个答案:

答案 0 :(得分:7)

我的回答类似于丹尼尔,但我会使用collect代替map

l.grouped(2).collect { case List(k, v) => k -> v }.toMap

如果您的列表中包含不匹配的密钥,则不会抛出异常:

scala>   val l = List("key1", "val1", "key2", "val2", "key3")
l: List[String] = List(key1, val1, key2, val2, key3)

scala> l.grouped(2).collect { case List(k, v) => k -> v }.toMap
res22: scala.collection.immutable.Map[String,String] = Map(key1 -> val1, key2 -> val2)

scala> l.grouped(2).map { case List(k, v) => k -> v }.toMap
scala.MatchError: List(key3) (of class scala.collection.immutable.$colon$colon)

某些上下文grouped返回List[List[String]],其中每个内部列表都有两个元素:

scala> l.grouped(2).toList // the toList is to force the iterator to evaluate.
res26: List[List[String]] = List(List(key1, val1), List(key2, val2))

然后使用collect匹配内部列表并创建一个元组,最后toMap将列表转换为Map

答案 1 :(得分:3)

l.grouped(2).map { case List(k, v) => k -> v }.toMap

答案 2 :(得分:-1)

你想让他们成对,然后将他们提供给地图

val lst: List[String] = List("key1", "val1", "key2", "val2")
val pairs = lst zip lst.tail
val m: Map[String,String] = pairs.toMap