F# で LINQ 入門 Where
Where はシーケンスに対し抽出を行います。LINQ の中では最も使用されるメソッドの1つではないでしょうか。
open System.Linq (* 年齢不詳の人物もいるため Option *) type person = { name : string; age : Option<int> } (* 公式より抜粋 http://www.guilty-crown.jp/ *) let charactors = { name = "Shu"; age = Some(17) } :: { name = "Gai"; age = Some(17) } :: { name = "Inori"; age = Some(16) } :: { name = "Ayase"; age = Some(17) } :: { name = "Tsugumi"; age = Some(14) } :: { name = "Shibungi"; age = Some(27) } :: { name = "Arugo"; age = Some(17) } :: { name = "Oogumo"; age = None } :: { name = "Fyu-Neru"; age = None } :: { name = "Hare"; age = Some(16) } :: { name = "Yahiro"; age = Some(17) } :: { name = "Souta"; age = Some(17) } :: { name = "Kanon"; age = Some(17) } :: { name = "Arisa"; age = Some(17) } :: { name = "Daryl"; age = Some(17) } :: [] (* 集以外で17歳以下 *) charactors.Where(fun c -> c.name <> "Shu" && c.age.IsSome && c.age.Value <= 17) |> Seq.iter (fun c -> printfn "%s" c.name)
実行結果
Gai Inori Ayase Tsugumi Arugo Hare Yahiro Souta Kanon Arisa Daryl type person = {name: string; age: Option<int>;} val charactors : person list = [{name = "Shu"; age = Some 17;}; {name = "Gai"; age = Some 17;}; {name = "Inori"; age = Some 16;}; {name = "Ayase"; age = Some 17;}; {name = "Tsugumi"; age = Some 14;}; {name = "Shibungi"; age = Some 27;}; {name = "Arugo"; age = Some 17;}; {name = "Oogumo"; age = null;}; {name = "Fyu-Neru"; age = null;}; {name = "Hare"; age = Some 16;}; {name = "Yahiro"; age = Some 17;}; {name = "Souta"; age = Some 17;}; {name = "Kanon"; age = Some 17;}; {name = "Arisa"; age = Some 17;}; {name = "Daryl"; age = Some 17;}]
ひょっとしたら集自身から取り出せるのかもしれないけれど。その展開も悪くは無い。