2013-11-04 14 views
7

Ho la seguente funzione:F # array flatmap

let fetchTickerGroup (tickers: string[]) (sqlServer:SQLServerClient) (schema: string) = 
tickers |> Array.map(fun x -> sqlServer.FetchTimeSerie(schema,x)) 

La funzione accetta un array di stringhe e, attraverso sqlServer recupera i dati che viene restituito da sqlServer.FetchTimeSerie come List<b> dove b è un oggetto definito personalizzato. Adesso, mappare l'array significa che la funzione fetchTickerGroup restituisce List<b>[].

Mi chiedevo se sarebbe stato possibile a flatMap il risultato, invece di mappare semplicemente i valori dell'array.

risposta

12

Non ho idea di cosa sia Flatmap ma penso che vogliate usare *.collect.

Penso che la soluzione migliore sarebbe qualcosa di simile

tickers |> Array.toList |> List.collect (fun x -> sqlServer.FetchTimeSerie(schema,x)) 

è necessario convertire in modo da avere solo i tipi di elenco o matrice

+9

FlatMap, raccogliere e SelectMany sono nomi diversi per lo stesso concetto –

+1

@ Gustavo: grazie, venendo da Scala ho usato una terminologia impropria. – NoIdeaHowToFixThis