F #: Как я могу использовать Map с коллекцией (например, Regex Matches)? - PullRequest
5 голосов
/ 19 ноября 2008

Так ... F # больше не имеет IEnumerable.map_with_type ... именно так люди отображали коллекции. Как мне это сделать сейчас?

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

Спасибо!

Ответы [ 2 ]

13 голосов
/ 20 ноября 2008

вы бы написали последнюю строку следующим образом:

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

И это можно написать лучше, используя оператор конвейерной обработки:

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

F # автоматически определяет, какой тип цели является правильным (потому что он знает, как выглядит matchToUrl). Это доступно только для Seq, поэтому вы можете использовать List.of_seq, чтобы снова получить данные в список.

3 голосов
/ 20 ноября 2008

Seq.cast - это то, что вы ищете?

...