将scala数组字符串转换为地图的最佳方法是什么?

时间:2016-05-26 19:21:11

标签: arrays string scala lambda hashmap

我有一个由tab char('\ 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]
                              }

3 个答案:

答案 0 :(得分: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))

答案 1 :(得分:0)

我通过以下方式开展工作。

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

输出:

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

答案 2 :(得分:0)

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

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

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