本日のあらすじ
Diff アルゴリズムを C# でてきとうに実装しました(タイトルそのままです)。
ちなみに 2 年半ほど前にも Java で似たようなことをしていましたが、当時はスクリーンショットだけ載せてはいおしまいでした。今回はせっかくなので超カオスなC#のソースも載せておこうと思います。tercel-tech.hatenablog.com
Diffって?
Diffとは異なるデータの差分を検出する処理のことで、業界の符丁では「Diffを取る」などと言ったりします。例として、2つのテキストのDiffを取ってみましょう。ちなみに例文はアンサイクロペディアからパクりました。
テキスト1:
個のよ鵜な返還ミスノお御杉る分掌はな2がなん打か輪からないの出、中石て乳緑し魔性。
テキスト2:
このような変換ミスの多すぎる文章はなにがなんだか分からないので、注意して入力しましょう。
テキスト1とテキスト2のDiffを取った結果:
こ個のよう鵜な変換返還ミスの多すノぎお御杉る文章分掌はなに2がなんだ打か分輪からないので出、 注意し中石て入力乳緑しまし魔ょ性う。
本日の成果物
リハビリも兼ねてDiff情報を求めるための拡張メソッドを作りました。
以下の使用例のように、string
オブジェクトに対して直接Diff
メソッドを呼べるようになります。
使用例:
var result = "おっぱい".Diff("いっぱい");
foreach (var item in result)
{
Console.WriteLine("{0} {1}", item.Key, item.Value);
}
実行結果:
い +
お -
っ =
ぱ =
い =
これを見た人は、「あぁ、『おっぱい』を『いっぱい』に書き換えるためには、1文字目に『い』を追加して、代わりに『お』を削除すればいいんだね。『っぱい』は共通要素だからそのままでいいんだね」とたちどころに理解できます。よかった。めでたい。
なお、出力の見た目をもう少しマシにする方法をこの記事の最後に載せておきました。
続きを読む