gpt4 book ai didi

scala - 在 String 中提取和分配值的有效方法是什么?

转载 作者:行者123 更新时间:2023-12-04 19:54:00 28 4
gpt4 key购买 nike

假设这个String:Point(123 456)

什么是提取 123456(作为 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)

很丑...

最佳答案

最直接的方法是使用正则表达式提取器。实际上,对于像这样简单的东西,这些速度非常快——与您的解决方案一样快。它更漂亮吗?我不知道。

val p = """Point\((\d+)\s(\d+)\)""".r
"Point(123 456)" match { case p(a,b) => (a,b) }

在我的机器上,使用这种方法提取 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))
}

这要快得多:在我的机器上 10k 为 0.38 毫秒。

关于scala - 在 String 中提取和分配值的有效方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25435494/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com