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?