我目前正在尝试这个,但是我还没有完全弄清楚方法签名... 有人能帮忙吗?messages是seq [string]的字段
let messageString = List.reduce(messages, fun (m1, m2) -> m1 + m2 + Environment.NewLine)
我目前正在尝试这个,但是我还没有完全弄清楚方法签名... 有人能帮忙吗?messages是seq [string]的字段
let messageString = List.reduce(messages, fun (m1, m2) -> m1 + m2 + Environment.NewLine)
> String.concat " " ["Juliet"; "is"; "awesome!"];;
val it : string = "Juliet is awesome!"
不完全是你想要的,但是
let strings = [| "one"; "two"; "three" |]
let r = System.String.Concat(strings)
printfn "%s" r
你可以这样做
let strings = [ "one"; "two"; "three" ]
let r = strings |> List.fold (+) ""
printfn "%s" r
或者let strings = [ "one"; "two"; "three" ]
let r = strings |> List.fold (fun r s -> r + s + "\n") ""
printfn "%s" r
Seq.fold (+) ""
。相对于 reduce
,它的好处是如果输入序列为空,也不会抛出“输入序列为空”的异常。 - Jason Kleban如果你只是简单的字符串连接,我建议使用String.concat方法。如果你需要进行更复杂的格式化操作,那么我建议使用StringBuilder。
(StringBuilder(), [ "one"; "two"; "three" ])
||> Seq.fold (fun sb str -> sb.AppendFormat("{0}\n", str))
再多说一句,
当你处理字符串时,最好使用标准的字符串函数。
以下代码是用于EulerProject问题40的。
let problem40 =
let str = {1..1000000} |> Seq.map string |> String.concat ""
let l = [str.[0];str.[9];str.[99];str.[999];str.[9999];str.[99999];str.[999999];]
l |> List.map (fun x-> (int x) - (int '0')) |> List.fold (*) 1
System.String.Join(Environment.NewLine, List.to_array messages)
或者使用你的折叠(请注意,这样做效率更低)
List.reduce (fun a b -> a ^ Environment.NewLine ^ b) messages