有效地连接字符串数组

efficiently concatenate array of strings

OCaml标准库提供函数String.concat

https://caml.inria.fr/pub/docs/manual-ocaml/libref/String.html

val concat : string -> string list -> string

String.concat sep sl concatenates the list of strings sl, inserting the separator string sep between each.

推测此函数的存在是为了更容易将多个字符串连接在一起 time/space 与字符串长度成线性关系。

数组是否存在类似的功能?特别是,有没有一种方法可以有效地将字符串数组连接在一起,而无需 1) 编写 C 扩展并构建棘手的中间结构或 2) 有效调用 String.concat "" (Array.to_list arr)).

我确信有更有效的方法,例如 unsafe_blit 方法 String.concat 使用,但简单的折叠至少是对选项 2 的改进:

Array.fold_left (fun acc s -> acc ^ s) "" arr

Reason/BuckleScript benchmark

最好是自己写concat函数模仿String.concat。如果你想要更短的东西,使用缓冲区来累积你的结果(Array.iter (Buffer.add_string b) arr)——不要重复连接,这会产生太多的分配。