我目前正在寻找在Ruby中解析字符串的最快方法。该字符串的格式为:
“#{String1}>#{String2}(#{Integer})”,例如“Hello> World(25)”
我希望从中检索String1,String2和Integer的值。我目前的做法只是
s1 = "Hello"
s2 = "World"
i = 25
str = "#{s1}>#{s2}(#{i})"
str = str.split('>')
newStr = str[1].split('(')
str[1] = newStr[0]
str[2] = newStr[1].chomp(')').to_i
print(str) # => ["Hello", "World", 25]`
我正在寻找比这更快的方法来加速我的程序。感谢。
答案 0 :(得分:1)
您可以使用正则表达式捕获组来获取这些值:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="clock">
<div id="hr"></div>
<div id="min"></div>
</div>
答案 1 :(得分:1)
字符串partition method甚至比split
方法更快。
str = "Hello>World(25)"
a, _, b = str.partition('>')
b, _, c = b.partition('(')
c = c.to_i
puts a, b, c
答案 2 :(得分:0)
您可以在#split
方法中使用正则表达式来实现相同的结果:
string = "Hello>World(25)"
result = string.split(/[>,()]/)
result[-1] = result[-1].to_i
result
# => ["Hello", "World", 25]
希望这有帮助!
答案 3 :(得分:0)
如果你想要速度超过可读性,你可能真的接近你将要获得的最快速度。通过将可选的limit
参数传递给split
并省略了不需要的chomp(')')
,我可以节省一些实施时间:
# Way #1
str = str.split('>', 2)
newStr = str[1].split('(', 2)
str[1] = newStr[0]
str[2] = newStr[1].to_i
或者,在大约相同的速度下(某些运行速度更快,其他运行速度更慢):
# Way #2
str = str.split(/[>(]/, 3)
str[2] = str[2].to_i