【问题标题】:What is the best way to convert a scala array of strings to a map?将 scala 字符串数组转换为地图的最佳方法是什么?
【发布时间】:2016-05-26 19:21:11
【问题描述】:

我有一个由制表符 ('\t') 分隔的字符串数组,在用 '\t' 分割后,第二个元素由一个 ',' 分隔,这只是一堆浮点数。将此字符串转换为地图的简洁方法是什么?

val values = List("abc\t1,.2,.4", "def\t6,.2,2.4")
Map[String,Array[Float]] = Map{
                               "abc": [1,.2,.4],
                               "def": [6,.2,2.4]
                              }

【问题讨论】:

    标签: arrays string scala lambda hashmap


    【解决方案1】:

    这里有一些可行的方法。没有太多检查大小或有效输入,因此您必须自己添加:

    values.map{x =>
      x.split("\t").toList match {
        case x :: y :: Nil => (x -> y.split(",").map(_.toFloat).toList)}
    }.toMap
    

    输出:

    res0: scala.collection.immutable.Map[String,List[Float]] = Map(abc -> List(1.0, 0.2, 0.4), def -> List(6.0, 0.2, 2.4))
    

    【讨论】:

    • 又好又漂亮!
    【解决方案2】:

    我通过下面的操作让它工作了。

    values.map(i => i.split('\t')).map(i => (i(0),i(1).split(',').map(_.toFloat))).toMap
    

    输出:

    res30: scala.collection.immutable.Map[String,Array[Float]]
    

    【讨论】:

      【解决方案3】:

      我认为这是一个相当简单的方法:

      val input = List("abc\t1,.2,.4", "def\t6,.2,2.4")
      
      /* Split the strings into (k,v) tuples, (v is still a string) */
      val split = input.map(x => {val spl = x.split("\t"); (spl(0), spl(1))})
      
      /* Split the v's into a float array, transform (k,v) list into a map */
      val output = split.map(x => (x._1, x._2.split(",").map(_.toFloat))).toMap
      

      (为了清楚起见,这些线被分开了)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-03-29
        • 2011-08-11
        • 2013-06-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多