如果我有case class Point(x: Double, y: Double)
和val s="(12,3.5),(33,42),(19.1,3)"
。如何将s
分割并转换成这样的东西?
Vector(Point(12,3.5),Point(33,42),Point(19.1,3))
(我想首先需要将s
分成"(12,3.5)"
,"(33,42)"
和"(19.1,3)"
,但我不知道如何以干净的方式执行此操作。之后,一些scala正则表达式可以将每个元素映射到x
类的y
和Point
...)
答案 0 :(得分:2)
我认为以下代码可能会对您有所帮助。
val s = "(12,3.5),(33,42),(19.1,3)"
val p = "[0-9.]+".r
val result = p.findAllIn(s).map(_.toDouble).grouped(2).map{case Seq(x, y) => Point(x, y)}.toVector
答案 1 :(得分:0)
要从字符串中提取元组,请考虑
val xs = """(\d+(\.\d*)?\,\d+(\.\d*)?)+""".r.findAllIn(s).toArray
Array(12,3.5, 33,42, 19.1,3)
构建点,
for (t <- xs; Array(x,y) = t.split(","))
yield Point(x.toDouble, y.toDouble)
提供
Array(Point(12.0,3.5), Point(33.0,42.0), Point(19.1,3.0))