Home
Insert
Update snippet 'List.groupWhile function'
Title
Passcode
Description
This snippet declares a function that operates on lists that groups elements of a sequence while the predicate holds. A new group is started for an element when the predicate no longer holds. The predicate is passed the current element and the previous element. This implementation is likely not very efficient.
Source code
module List = let groupWhile<'a> (predicate : 'a -> 'a -> bool) = List.scan (fun state item -> let prevHead = state |> List.tryHead |> Option.bind List.tryHead if prevHead |> Option.map (predicate item) |> Option.defaultValue false then (item :: List.head state) :: (List.tail state) else [item] :: state) [] >> List.last >> List.map List.rev >> List.rev
Tags
grouping
list
grouping
list
Author
Link
Reference NuGet packages
If your snippet has external dependencies, enter the names of NuGet packages to reference, separated by a comma (
#r
directives are not required).
Update