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

时间:2016-10-21 06:33:56

标签: scala scala-collections

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

现在我想要的是从中创建一个地图。我知道执行此操作的必要方法,我将获得可以foreach的Array [String],然后通过" ="然后键和值可用于形成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)
  }

3 个答案:

答案 0 :(得分:2)

您可以使用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)

也许您必须为intellij

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

答案 1 :(得分:1)

与上述相似,但只使用'map'

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

答案 2 :(得分:0)

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