2012-05-24 12 views
5

Gibt es eine Standardfunktion zum Aufzählen einer F # -Sequenz, die wie Pythons enumerate() funktioniert?Automatische Aufzählung einer Sequenz

Es ist sehr einfach von Grund auf neu zu schreiben:

let enumerate (sq : seq<'T>) = seq { 
    let rec loop (e : IEnumerator<'T>) index = seq { 
     if e.MoveNext() then 
      yield (index, e.Current) 
      yield! loop e (index+1) 
    } 

    use enum = sq.GetEnumerator() 
    yield! loop enum 0 
    } 

aber ich will nicht das Rad neu zu erfinden.

PS: Auch habe ich versucht,

let seasons = ["Spring"; "Summer"; "Fall"; "Winter"] 
for x in Seq.zip [0..100000] seasons do 
    printfn "%A" x 

aber [0..10000] Teil sieht hässlich aus.

Antwort

1

Dies ist, was Sie wollen:

module Seq = 
    let inline enumerate source = Seq.mapi (fun i x -> i,x) source 

> ["a"; "b"] |> Seq.enumerate;; 
val it : seq<int * string> = seq [(0, "a"); (1, "b")] 

Oder Hot ‚n Spicy mit FSharpx:

let enumerate source = Seq.mapi (curry id) source 

Nun, in FSharpx eigentlich ist es schon erhältlich als Seq.index.

Verwandte Themen