SG

F# で LINQ 入門 ElementAt ElementAtOrDefault

 なかなか .NET Framework 2.0 を抜け出せないまま、LINQ なんて使わないし覚えなくていいや……と思っていたらいつの間にか .NET Framework も 4.5 がリリースされようとしているではありませんか。最近はテストメソッドで LINQ を嗜んでいますが、相変わらずプロジェクトは .NET Framework 2.0 のまま。世の中の動きに置いてかれないよう、LINQ のおさらいをしておくことにしました。折角なので F# で。List モジュールがあるのに F# で。

open System.Linq

(* 入部した順に並んでいるリスト。入部順はアニメ準拠 *)
let mizusawa = ["Chihaya"; "Taichi"; "Kanade"; "Tsutomu"; "Nikuman"]

(* n番目に入部した子を取得する *)
let nthMember n = 
    let n = n - 1
    mizusawa.ElementAt n

(* 肉まん君が表示される *)
5 |> nthMember |> printfn "%s"

(* 
   まだ入部していない子を表示しようとするとエラー 
6 |> nthMember |> printfn "%s"
*)

(* エラーではなくデフォルト値が欲しいときは ElementAtOrDefault を使用する *)
let nthMember' n = 
    let n = n - 1
    mizusawa.ElementAtOrDefault n

5 |> nthMember' |> printfn "%s"
6 |> nthMember' |> printfn "%s"

(* null はいやん……option を使おう *)
let nthMember'' n = 
    let n = n - 1
    match mizusawa.ElementAtOrDefault n with
    | null -> None
    | name -> Some(name)

5 |> nthMember'' |> printfn "%A"
6 |> nthMember'' |> printfn "%A"

 ElementAt メソッドは単体で使う機会は少ないと思います。
 LINQ のメソッドを適当に分けていたら 24 回分になってしまいましたが、流行の一人 Advent Calendar ではありません。明日は First と Last の予定。