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))
。
答案 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