2008-11-19 10 views
5

Soo ... F # ya no tiene IEnumerable.map_with_type ... que es la forma en que las personas fueron mapeando colecciones. ¿Cómo hago eso ahora?F #: ¿Cómo uso Map with a Collection (como Regex Matches)?

let urlPat = "href\\s*=\\s*(?:(?:\\\"(?<url>[^\\\"]*)\\\")|(?<url>[^\\s]*))";; 
let urlRegex = new Regex(urlPat) 
let matches = 
    urlRegex.Matches(http("http://www.google.com")) 

let matchToUrl (urlMatch : Match) = urlMatch.Value 
let urls = List.map matchToUrl matches 

¡Gracias!

+1

¿Por qué estaba marcado? –

Respuesta

12

que iba a escribir la última línea como la siguiente:

let urls = Seq.map matchToUrl (Seq.cast matches);; 

y esto puede ser escrito de una manera más agradable el uso de operador de la canalización:

let urls = matches|> Seq.cast |> Seq.map matchToUrl;; 

F # figuras automáticamente cuál es el tipo de derecho de destino (porque sabe cómo se ve matchToUrl). Esto está disponible solo para Seq, por lo que puede usar List.of_seq para volver a obtener los datos en una lista.

3

¿Seq.cast es lo que está buscando?

+0

Suena como ... ¿Cómo funcionaría? Intenté buscar en Google pero no encontré nada útil. –

+0

Ver la respuesta de Tomás. Seq.cast toma un IEnumerable y lo convierte en IEnumerable (y generalmente infiere el T en su nombre). – Brian

Cuestiones relacionadas