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

Converting command line argument key=value pair to Map in scala

在我的主程序中,我收到如下输入 - 键 1=值 1 键 2=值 2

现在我想要用它创建一张地图。我知道这样做的必要方式,我会得到 Array[String],它可以是 foreach,然后用“=”分割,然后键和值可以用来形成一个 Map。

有没有一个好的功能和可读性的方法来实现这个? 如果我可以避免可变 Map 并且我想避免初始 Dummy 值初始化,那将会很棒。

  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)
  }

你可以直接使用 toMap().

然而,从数组到元组的转换并不简单: How to convert an Array to a Tuple?

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)

也许你需要调用 Function.unlift for intellij

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

与上面类似,但仅使用 'map'

ar.map(_.split("=")).map(a=>(a(0), a(1))).toMap

您可以使用Scopt以简洁的方式进行命令行参数解析。