假设String:Point(123 456).
什么是一个有效和干净的方式来提取和分配123和456(as String)Tuple2一次?
我做了什么:
val str = "Point(123 456)"
val tab = str.stripPrefix("Point(").stripSuffix(")").split("\\s")
val tuple2 = (tab(0), tab(1))
println(tuple2) // displays the (123,456)
Run Code Online (Sandbox Code Playgroud)
蛮丑的 ...
最直接的方法是使用正则表达式提取器.实际上,对于像这样简单的东西来说,这些速度非常快 - 与解决方案一样快.它更漂亮吗?我不知道.
val p = """Point\((\d+)\s(\d+)\)""".r
"Point(123 456)" match { case p(a,b) => (a,b) }
Run Code Online (Sandbox Code Playgroud)
在我的机器上,使用这种方法提取10,000个这样的对需要3.90毫秒,使用你的方法需要4.35毫秒(主要是由于额外的缓慢split).
如果由于某些奇怪的原因你需要它更快,
def uuple2(s: String) = {
if (!s.startsWith("Point(") || s(s.length-1) != ')') throw new Exception
val i = s.indexOf(' ',6)
if (i < 0 || i+2 >= s.length) throw new Exception
(s.substring(6,i), s.substring(i+1,s.length-1))
}
Run Code Online (Sandbox Code Playgroud)
这样更快:我机器上的10k为0.38 ms.
| 归档时间: |
|
| 查看次数: |
59 次 |
| 最近记录: |