4回にわたって小ネタを書いてきました!!!
- stringの配列からDictionary<string, string>への変換
- stringの配列からDictionary<string, string>への変換 その2
- stringの配列からDictionary<string, string>への変換 その3
- stringの配列からDictionary<string, string>への変換 その4
id:masa-kさんのブログでも取り上げてもらえました。
個人的にも、今回はToDictionary
id:masa-kさんの記事にあるようにPerl5みたいな機能があれば自作しなくていいので一番いいなぁと思いました。標準ライブラリがどれだけ充実してライトに処理が書けるかというのは個人的には、とても大事なポイントです。
.NET系言語は、BCLが割とかゆい所まで手が届くので満足してるのですが、たまにLL系の言語羨ましいな〜と思うときがあります。その点F#には地味に期待してたりします。
因みにF#では要素数が2つのタプルのシーケンスからIDictionaryに変換してくれるdictという関数があるので配列からタプルの配列にしてやる処理さえ書けばOKです。
let array = ["1"; "one"; "2"; "two"; "3"; "three"] let rec toPair (s : list<'T>) = seq { match s with | fst::snd::[] -> yield fst, snd | fst::snd::tail -> yield fst, snd; yield! toPair tail | fst::[] -> yield fst, null | _ -> failwith "NG" } // 'T list -> seq<'T * 'T> -> IDictionary<'T, 'T> let d = array |> toPair |> dict printfn "%A" d // こう表示される seq [[1, one]; [2, two]; [3, three]]
さて、ここで新たなる課題が。このtoPair関数を末尾再帰にしたいけどやりかたが・・・orz