我正在处理一个包含5个字符串的数组。并将项目连接成一个大字符串。 x
是数组,如下所示:
val x : System.String [] =
[|"W0SPFR"; "1BUDJY"; "1L1RJV"; "ITBPFA"; "QVUS7N"; "CJ6ZMQ"; "V3HUQ5";
"694L4U"; "8RYWPF"; "YGWS8U"; "3KEKA9"; "1C9L6Q"; "OXCGSF"; "GF0CUQ";
"YR41AF"; "4D4U0G"; "1U94T1"; "VUVJI0"; "CTYQL3"; "310XVU"; ...|]
我最初的尝试是:
let y = x |> Array.reduce (fun x y -> x+"-"+y)
不幸的是,即使对于中等大小的阵列(10,000个元素),这也很慢。我希望将其扩展到数百万。
Real: 00:00:00.483, CPU: 00:00:00.577, GC gen0: 167, gen1: 6, gen2: 5
我的第二次尝试更好:
open System.Text
let buf = new System.Text.StringBuilder()
let z = x |> Array.fold (fun (buf:StringBuilder) x -> buf.Append(x+"-")) buf |> string
z.[0..(z |> Seq.length)-2] = y
问题1 :
StringBuilder是构建这个大字符串的最快方法吗? 我也愿意并行化。
问题2 :
因为我在第二次尝试中使用了折叠,-
正在加入到最后一项,因此我正在使用z.[0..(z |> Seq.length)-2]
来消除它。
有更优雅的方式吗?