简单的单词diff算法

Val*_*yon 11 c# diff windows-phone-7

我当前正在寻找一种简单而轻量级的算法来比较两个简单的字符串.

例如,如果我们采用这两个字符串:

  • "敏捷的棕色狐狸跳过了懒狗"
  • "漂亮的棕色狐狸蜷缩在疯狂的狗身上"

它应该告诉我第二个单词的2个第一个字母是不同的,等等.

现在我有一个非常简单的算法来比较单词:

/// <summary>
    /// Make a diff between two strings and returns words indices
    /// </summary>
    /// <param name="a"></param>
    /// <param name="b"></param>
    /// <returns></returns>
    public static List<int> Diff(string a, string b)
    {
        List<int> indices = new List<int>();

        string[] asplit = a.Split(' ');
        string[] bsplit = b.Split(' ');

        for (int i = 0; i < asplit.Length; i++)
        {
            if (bsplit.Length > i)
            {
                if (asplit[i].CompareTo(bsplit[i]) != 0)
                {
                    indices.Add(i);
                }
            }
        }

        return indices;
    }
Run Code Online (Sandbox Code Playgroud)

所以这将告诉我哪些单词(使用空格字符的分割)是不同的.

我在这里阅读了很多关于实现复杂算法或使用现有库的主题.

但是我通过.NET紧凑框架(WP7)进行了重新训练,我不会想要比较两个文件或两个文本,我只需要一个单词比较.

有没有适合的库或算法?谢谢 :).

Aus*_*son 3

您可以查看DiffPlex项目。

核心功能看起来像是在 \DiffPlex\Differ.cs 中,它甚至有一个 Silverlight 查看器,但可能需要一些移植。

编辑:

我想补充一点,DiffPlex 根据您的问题专门支持单词比较。隐藏在所有其他字符、线条等比较方法中可能并不明显。