Eine Folge gleicher Zeichen in F # @ teilen / gruppier

Ich muss die Folge gleicher Zeichen in einem Text extrahieren.

Zum Beispiel: Der String"aaaBbbcccccccDaBBBzcc11211" sollte in eine Liste von Strings wie @ konvertiert werd["aaa";"B";"bb";"ccccccc";"D";"a";"BBB";"z";"cc";"11";"2";"11"].

Das ist meine Lösung bis jetzt:

let groupSequences (text:string) = 

    let toString chars =
        System.String(chars |> Array.ofList)

    let rec groupSequencesRecursive acc chars = seq {
        match (acc, chars) with
        | [], c :: rest -> 
            yield! groupSequencesRecursive [c] rest
        | _, c :: rest when acc.[0] <> c -> 
            yield (toString acc)
            yield! groupSequencesRecursive [c] rest
        | _, c :: rest when acc.[0] = c -> 
            yield! groupSequencesRecursive (c :: acc) rest
        | _, [] -> 
            yield (toString acc)
        | _ -> 
            yield ""
    }

    text
    |> List.ofSeq
    |> groupSequencesRecursive []

groupSequences "aaaBbbcccccccDaBBBzcc11211"
|> Seq.iter (fun x -> printfn "%s" x)
|> ignore

Ich bin ein F # Neuling.

Diese Lösung kann besser sein?

Antworten auf die Frage(12)

Ihre Antwort auf die Frage