有效地连接字符串数组

时间:2017-11-30 00:58:00

标签: arrays ocaml string-concatenation

OCaml标准库提供函数String.concat

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

  

val concat : string -> string list -> string

     

String.concat sep sl连接字符串列表sl,插入分隔符字符串   每个之间sep

据推测,这个函数的存在是为了更容易在字符串的长度上以时间/空间线性连接多个字符串。

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

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:2)

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

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

Reason/BuckleScript benchmark