我有一个单一的有序字符串数组,从外部系统以以下形式导入:
val l = List("key1", "val1", "key2", "val2", etc...)
如何使用Scala将此转换为映射,以便可以遍历键并获取关联值?
谢谢
我有一个单一的有序字符串数组,从外部系统以以下形式导入:
val l = List("key1", "val1", "key2", "val2", etc...)
如何使用Scala将此转换为映射,以便可以遍历键并获取关联值?
谢谢
我的回答与Daniel的类似,但我会使用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
。
l.grouped(2).map { case List(k, v) => k -> v }.toMap
你需要将它们成对,然后提供给一个映射表
val lst: List[String] = List("key1", "val1", "key2", "val2")
val pairs = lst zip lst.tail
val m: Map[String,String] = pairs.toMap
lst zip lst.tail
返回 List((key1,val1), (val1,key2), (key2,val2))
,请注意第二个元组 (val1,key2)
。 - Ende Neu