//old version.
let suffixMap<'a when 'a : comparison> : ('a list list -> list<'a * 'a list list>) =
let alter k v (m:Map<_,_>) : Map<_,_> =
match Map.tryFind k m with
| None -> Map.add k [v] m
| Some x ->
Map.add k (v::x) m
let step m (l:'a list)=
match l with
|x::xs ->
alter x xs m
|_-> m
List.map id<<Map.toList<<List.fold step Map.empty
//new version.
let suffixMap l =
Seq.groupBy List.head l
|>Seq.map (fun (x,ls)->
x,
Seq.map List.tail ls
|>Seq.toList)
|>Seq.toList)
Hier nochmals der aktualisierte Code.
Keine Kommentare:
Kommentar veröffentlichen