比较C#中的两个数组

Gib*_*boK 0 c# arrays

bool hasDuplicate = false;   
int[] a = new int[] {1, 2, 3, 4};
int[] b = new int[] { 5, 6, 1, 2, 7, 8 };
Run Code Online (Sandbox Code Playgroud)

我需要将数组A的所有元素与数组B的元素进行比较,如果B中存在重复元素,则在TRUE上设置hasDuplicate.

pha*_*unk 5

我知道您不想要单行解决方案,但我会将我的答案留给可能需要针对同一问题的简单解决方案的其他用户。

如果您不想使用Linq,则可以使用SequenceEqual

bool equal = Array1.SequenceEqual(Array2);

希望能帮助到你。


Mar*_*rio 5

不是最高效的,但可能最容易理解的方法是这样的:

foreach (int _a in a) { // iterate through all elements in array a (as _a)
    foreach (int _b in b) { // iterate through all elements in array b (as _b)
        if (_a == _b) { // if we've got a duplicate
            hasDuplicates = true; // store that for later on
            break; // immediately leave this loop (no point in further looking up)
        }
    }
    if (hasDuplicates) { // if we've got a duplicate
        break; // leave this loop as well (no point in further looking up)
    }
}
Run Code Online (Sandbox Code Playgroud)

显然,这是不作为复杂性将是最高效的解决方案O(n²),这意味着在任何一个阵列元件的数量的两倍将增加一倍的花费来完成操作(最坏情况)的时间量; 两个数组中元素数量的两倍将使时间增加四倍。

更优雅的解决方案是使用其他一些解决方案中描述的预定义方法,但由于这是家庭作业,我不希望您被允许使用这些“快捷方式”(或应该这样做)。

永远记住:即使你在这里找到了解决方案,也要试着去理解它们,用它们来获得灵感,然后写出你自己的。这可能是最好的学习方式。不要只是复制和粘贴。


vcs*_*nes 5

既然这是作业,我就给你一个作业答案。

当然,你可以使用LINQ和依赖SequenceEqualIntersect等等,但是这很可能不是锻炼的点。

给定两个数组,您可以使用 迭代数组中的元素foreach

int[] someArray;
foreach(int number in someArray)
{
     //number is the current item in the loop
}
Run Code Online (Sandbox Code Playgroud)

因此,如果您有两个相当小的数组,您可以遍历第一个数组的每个数字,然后遍历第二个数组中的所有项目并进行比较。让我们试试看。首先,我们需要更正您的数组语法。它应该是这样的:

    int[] a = new int[] {1, 2, 3, 4};
    int[] b = new int[] { 5, 6, 1, 2, 7, 8 };
Run Code Online (Sandbox Code Playgroud)

注意大括号的使用{。您正在使用该语法来创建 N 维数组。

bool hasDuplicate = false;
int[] a = new int[] { 1, 2, 3, 4 };
int[] b = new int[] { 5, 6, 7, 8 };
foreach (var numberA in a)
{
    foreach (var numberB in b)
    {
        //Something goes here
    }
}
Run Code Online (Sandbox Code Playgroud)

这让我们非常接近。我鼓励你从这里自己尝试。如果您仍然需要帮助,请继续阅读。


好的,所以我们基本上只需要检查数字是否相同。如果是,则设置hasDuplicate为 true。

bool hasDuplicate = false;
int[] a = new int[] { 8, 1, 2, 3, 4 };
int[] b = new int[] { 5, 6, 7, 8 };
foreach (var numberA in a)
{
    foreach (var numberB in b)
    {
        if (numberA == numberB)
        {
            hasDuplicate = true;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这是一种非常“蛮力”的方法。循环的复杂性是 O(n 2 ),但这在您的情况下可能无关紧要。使用 LINQ 的其他答案肯定更有效,如果效率很重要,您可以考虑这些。另一种选择是使用breakif hasDuplicateis true来“停止”循环,或者将此代码放在一个方法中并用于return退出该方法。