我有一个由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]
}
答案 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
(为清晰起见,这些线被分开)