かずきのBlog@hatena

日本マイクロソフトに勤めています。XAML + C#の組み合わせをメインに、たまにASP.NETやJavaなどの.NET系以外のことも書いています。掲載内容は個人の見解であり、所属する企業を代表するものではありません。

重複したメールアドレスがあるかないかのチェックプログラム書いてみた

メールアドレスが改行くぎりで列挙されてるテキストから重複がないか確認しないといけなくなったので、どうせなのでF#で書いてみた。どうだろう?まだまだスマートに書けるかな・・・。

open System
open System.IO

let distinctCheck (stream : StreamReader) =
    // 分割して
    let addresses = stream.ReadToEnd().Split([|Environment.NewLine|], StringSplitOptions.RemoveEmptyEntries)
    // 重複排除して
    let distinctAddresses = addresses |> Seq.distinct |> Seq.toArray
    // 長さ比べ
    printfn(if addresses.Length = distinctAddresses.Length then "OK" else "NG")

using(new StreamReader("input.txt")) distinctCheck

因みに想定しているインプットはこんな感じです。

hogehoge@sample.com
mogemoge@sample.com
chomechome@sample.com

上記は重複がないのでOKと出る。以下のように重複があるとNGと出る。

hogehoge@sample.com
mogemoge@sample.com
hogehoge@sample.com

残念ながら、手持ちのファイルではNGと表示された・・・。これから何が重複してるか探すお仕事。