在Opa中实现“反向字符串”功能的最佳方法是什么?
我知道String.reverse()
。它确实完成了工作,但它的源代码绑定到一些外部函数。我想了解重新排序字符串的最佳(最快)工具是什么。
因此,例如,这有效,但速度不是很快:
reverse(s:string) =
p = parser
| x=(.) xs=(.*) -> Text.concat(reverse(Text.to_string(xs)), x)
| x=(.*) -> x
Parser.parse(p, s)
如何让这个表现更好?
我认为这就是他的想法。这个比解析器版本快得多,但如果你需要做的就是反转一个字符串,那么内置的String.reverse
就是你的选择。
reverse_list(l:list(string)):list(string) =
match l with
| [x|xs] -> reverse_list(xs) ++ [x]
| _ -> []
reverse_string(s:string) =
string_list = List.init((i -> String.get(i, s)), String.length(s))
String.flatten(reverse_list(string_list))
查看已接受的答案以获得更好的选择。
答案 0 :(得分:1)
为什么不想使用String.reverse
? (是反转字符串的首选方式)。或者这只是一个练习?
我建议使用List.init
生成字符列表,String.get
(获取字符串的第n个字符)和String.flatten
将字符列表转换回一个字符串。
这应该比基于解析的方法更快,顺便说一句。具有二次复杂性,所以难怪它很慢。
修改:我想到的解决方案:
reverse_string(s:string) =
n = String.length(s)
rev_list = List.init((i -> String.get(n - i - 1, s)), n)
String.flatten(rev_list)