找到两个数组之间差异的算法

时间:2009-02-19 18:23:13

标签: arrays c#-2.0

给定两个数组,是否有一种快速算法可以找到两者中不同的所有元素?例如,考虑两个键阵列(如键盘键)结构。一个表示当前按下的键,另一个表示在最后一个时间步骤中按下的键。

Keys[] oldKeys = LastKeyboardState.GetPressedKeys();
Keys[] currKeys = CurrentKeyboardState.GetPressedKeys();

// the user just pressed these key(s) during the last timestep.
Keys[] diff = ...

建议非常感谢!

4 个答案:

答案 0 :(得分:6)

蛮力算法就是m * n,其中m和n是两个数组的大小。

如果您使用任何种类的树而不是线性数组,那么您的时间将降至m * log2(n)

该算法是

foreach(key ok in oldkeys)
{
    if(!oldKeys.Contains(ok))
    {
        diff.add(ok);
    }
}
foreach(key nk in newkeys)
{
    if(!newKeys.Contains(nk))
    {
        diff.add(nk);
    }
}

答案 1 :(得分:5)

试试这个

var diff = oldKeys.Except(currKeys);

这需要C#3.0

答案 2 :(得分:2)

要跟进JaredPar:这只会显示oldKeys中的键,而不会显示在currKeys中。因此,如果A在currKeys中而不在oldKeys中,则它不会出现在diff。

var diff = oldKeys.Union(currKeys).Except(currKeys.Intersect(oldKeys))

也会得到那些。

答案 3 :(得分:1)

两个位域,运行二进制XOR。无论你剩下什么,都是你想要的。