将命令行参数 key=value 对转换为 scala 中的 Map

Moh*_*nan 2 scala scala-collections

在我的主程序中,我收到类似 - key1=value1 key2=value2 的输入

现在我想要的是用它创建一个地图。我知道执行此操作的命令式方法,我将获得可以 foreach 的 Array[String],然后用“=”分割,然后可以使用键和值来形成 Map。

有没有一种好的功能性和可读性的方法来实现这一点?另外,如果我可以避免可变映射并且我想避免初始虚拟值初始化,那就太好了。

  def initialize(strings: Array[String]): Unit = {
    val m = collection.mutable.Map("dummy" -> "dummyval")
    strings.foreach(
      s => {
        val keyVal:Array[String] = s.split("=")

        m += keyVal(0) -> keyVal(1)

      })
    println(m)
  }
Run Code Online (Sandbox Code Playgroud)

ymo*_*nad 5

你可以只使用toMap()

然而,从数组转换为元组并不是那么简单: 如何将数组转换为元组?

scala> val ar = Array("key1=value1","key2=value2")
ar: Array[String] = Array(key1=value1, key2=value2)

scala> ar.collect(_.split("=") match { case Array(x,y) => (x,y)}).toMap
res10: scala.collection.immutable.Map[String,String] = Map(key1 -> value1, key2 -> value2)
Run Code Online (Sandbox Code Playgroud)

也许你需要打电话Function.unlift给intellij

val r = ar.collect(Function.unlift(_.split("=") match { case Array(x, y) => Some(x, y)})).toMap
Run Code Online (Sandbox Code Playgroud)