F#:如何将Map与集合(如Regex Matches)一起使用?

时间:2008-11-19 20:39:35

标签: f# map

Soo ... 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 个答案:

答案 0 :(得分:12)

你会像这样写下最后一行:

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

这可以使用流水线操作符以更好的方式编写:

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

F#自动确定什么是正确的目标类型(因为它知道matchToUrl的样子)。这仅适用于Seq,因此您可以使用List.of_seq将数据再次输入列表。

答案 1 :(得分:3)

Seq.cast是您要找的吗?