は、あなたは配列の配列で終わる - 各td.pagenav
のためにあなたがhref
をそれぞれ有する<a>
の束を、持っています。そのため、2つのネストされたSeq.iter
を持っていなければなりません。まず外側のシーケンスに対して繰り返しを行い、各繰り返しで内側のシーケンスに対して繰り返します。
シーケンスのシーケンスをフラット化するには、Seq.collect
を使用します。さらに、(彼らは同等だ)Seq.toList
またはList.ofSeq
を使用して、リストに列を変換するには:
let a = [ [1;2;3]; [4;5;6] ]
let b = a |> Seq.collect id |> Seq.toList
> val b : int list = [1; 2; 3; 4; 5; 6]
あなたのコードにこれを適用する:
let links =
results.Descendants("td")
|> Seq.filter (fun x -> x.HasClass("pagenav"))
|> Seq.map (fun x -> x.Elements("a"))
|> Seq.collect (fun x -> x |> Seq.map (fun y -> y.AttributeValue("href")))
|> Seq.toList
それともあなたはそれビットクリーナーによって作ることができます私はむしろ、リスト内包としてこれを書き換えるだろう、と述べた
let links =
results.Descendants("td")
|> Seq.filter (fun x -> x.HasClass("pagenav"))
|> Seq.collect (fun x -> x.Elements("a"))
|> Seq.map (fun y -> y.AttributeValue("href"))
|> Seq.toList
:あなたが最初のネストされたシーケンスが発生した時点でSeq.collect
を適用します。もっときれいに見える:
let links = [ for td in results.Descendants "td" do
if td.HasClass "pagenav" then
for a in td.Elements "a" ->
a.AttributeValue "href"
]
完璧な答え、ありがとう! – snowbane
私の答えがあなたを助けたら、それを受け入れることを検討しますか? –