gpt4 book ai didi

ocaml - 如何附加到ocaml中的字符串?

转载 作者:行者123 更新时间:2023-12-02 17:00:12 25 4
gpt4 key购买 nike

我不知道如何在循环中向自身添加一些字符串。

let parameters = [| [| ("name", "fdjks"); ("value", "dsf") |]; [| ("name", "&^%"); ("value", "helo") |] |] ;;
let boundary = "----WebKitFormBoundary7MA4YWxkTrZu0gW";;
let body = "";;

for x = 0 to (Array.length(parameters) : int)-1 do
let (_, paramName) = parameters.(x).(0) in
let (_, paramValue) = parameters.(x).(1) in
body = body ^ "--" ^ boundary ^ "\r\n" ^ "Content-Disposition:form-data; name=\"" ^ paramName ^ "\"\r\n\r\n" ^ paramValue ;
print_endline(body)
done;;

但是这给出了错误..有什么办法可以做到这一点......?

最佳答案

(^) 运算符连接两个字符串,例如,

# "hello" ^ ", " ^ "world!";;  
- : string = "hello, world!"

如果您有一个字符串列表,那么您可以使用 String.concat 函数,该函数接受一个分隔符和一个字符串列表,并以一种有效的方式在其中生成连接:

# String.concat ", " ["hello"; "world"];;
- : string = "hello, world"

为什么在循环中使用 (^) 运算符是个坏主意?每个连接都会创建一个新字符串,然后将两个字符串的内容复制到新字符串中。因此,附加 N 字符串将以大约 n^2 次复制结束(其中 n 是字符串的长度)。在 Java 和其他语言/库中也是如此,其中连接返回一个新字符串,而不是改变其参数之一。通常的解决方案是使用 StringBuilder pattern ,在 OCaml 中用 Buffer 表示模块。因此,假设您没有 String.concat 函数,并且您想构建自己的高效串联函数(这也很有用,因为 Buffer 是一个比 String.concat 更通用的解决方案,并且可以在例如您输入的不是列表的情况下工作)。这是我们的实现,

let concat xs =
let buf = Buffer.create 16 in
List.iter (Buffer.add_string buf) xs;
Buffer.contents buf

此函数将创建一个缓冲区,该缓冲区会自动调整自身大小。 16 只是一个初步猜测,可以是任何数字。在第二行,我们只是遍历所有字符串并将其推送到缓冲区,最后,我们要求缓冲区构建结果字符串。下面是我们如何使用这个函数:

# concat ["hello"; ", "; "world"];;
- : string = "hello, world"

关于ocaml - 如何附加到ocaml中的字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54517086/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com