How To Change List of Chars To String?

How many ways can you build a string in F#? Here's another handful:

let chars = ['H';'e';'l';'l';'o';',';' ';'w';'o';'r';'l';'d';'!']

//Using an array builder
let hw1 = new string [|for c in chars -> c|]

//StringBuilder-Lisp-like approach
open System.Text
let hw2 = 
    string (List.fold (fun (sb:StringBuilder) (c:char) -> sb.Append(c)) 
                      (new StringBuilder())
                       chars)

//Continuation passing style
let hw3 =
    let rec aux L k =
        match L with
        | [] -> k ""
        | h::t -> aux t (fun rest -> k (string h + rest) )
    aux chars id

Edit: timings may be interesting? I turned hw1..3 into functions and fed them a list of 500000 random characters:

  • hw1: 51ms
  • hw2: 16ms
  • hw3: er... long enough to grow a beard? I think it just ate all of my memory.

Have you tried

System.String.Concat(Array.ofList(lChars))

Tags:

String

F#