かずきのBlog@hatena

日本マイクロソフトに勤めています。このブログは個人ブログなので、ここに書いている内容は個人的な意見で会社の公式見解ではない点にご注意ください。好きなものは XAML と C# 。苦手なものは型の無い言語です。

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

メールアドレスが改行くぎりで列挙されてるテキストから重複がないか確認しないといけなくなったので、どうせなので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と表示された・・・。これから何が重複してるか探すお仕事。