C#如何在从控制台读取后对数组的所有int元素进行异或运算?

C#如何在从控制台读取后对数组的所有int元素进行异或运算?,c#,arrays,console,xor,C#,Arrays,Console,Xor,我的真正目的是获取唯一出现奇数次的数组元素。所以我发现它可以通过对数组的所有元素进行异或运算来实现。像这样: int[] arr = { 3, 4, 7, 7, 0, 4, 0, 7, 3 }; Console.WriteLine(arr[0] ^ arr[1] ^ arr[2] ^ arr[3] ^ arr[4] ^ arr[5] ^ arr[6] ^ arr[7] ^ arr[8]); 但是问题是数组没有给出,而是从控制台读取,因此我不知道在输入元素后如何对它们进行异或。到目前为止,我能写

我的真正目的是获取唯一出现奇数次的数组元素。所以我发现它可以通过对数组的所有元素进行异或运算来实现。像这样:

int[] arr = { 3, 4, 7, 7, 0, 4, 0, 7, 3 };
Console.WriteLine(arr[0] ^ arr[1] ^ arr[2] ^ arr[3] ^ arr[4] ^ arr[5] ^ arr[6] ^ arr[7] ^ arr[8]);
但是问题是数组没有给出,而是从控制台读取,因此我不知道在输入元素后如何对它们进行异或。到目前为止,我能写出的代码是:

编辑:多亏了你的帮助,我成功地完成了代码

static void Main()
        {                
        int N = int.Parse(Console.ReadLine());
        long[] rectArray = new long[N];           

        for (int i = 0; i < N; i++)
        {
            rectArray[i] = long.Parse(Console.ReadLine());
        }
        long initial = rectArray[0]; 
        for (int i = 1; i < rectArray.Length; ++i)
        {
            initial ^= rectArray[i];
        }            
        Console.WriteLine(initial);
        }
}
static void Main()
{                
int N=int.Parse(Console.ReadLine());
long[]rectary=new long[N];
对于(int i=0;i

另外,我是个真正的傻瓜,所以请耐心点!:)

您可以编写一个循环:

int initial = 0;
for( int i = 0; i < arr.Length; ++i ) {
    initial ^= arr[i];
}
Console.WriteLine( initial );
int initial=0;
对于(int i=0;i
与Esailija的答案相同,但使用
foreach
——利用
0^x==x
的所有值
x

int current = 0;
foreach (int value in array)
{
    current ^= value;
}
Console.WriteLine(current);
编辑:如评论中所述,LINQ的
Aggregate
方法也可以做到这一点——由于我们很乐意在第一步中使用前两个值,我们甚至不需要提供种子:

int xor = array.Aggregate((x, y) => x ^ y);
for(int i=0;i
是否将
arr.Aggregate(0,(a,b)=>a^b)
等效?@vcsjones:是的,但我在发布之前就分心了。我发现与LINQ的其他部分相比,
Aggregate
很麻烦。你自己贴出来回答:)@vcsjones:事实上,我们甚至不需要提供种子。查看我的编辑:)您的int-xor=array.Aggregate((x,y)=>x^y);建议对我来说是新的东西,我正试图理解它,但我如何在我的代码中实现它呢?@Todo:我不确定在这种情况下“实现它”是什么意思-您为
System.Linq
名称空间添加了
using
指令,然后我的答案中的代码就是您所需要的一切。不过,你应该仔细阅读LINQ,以正确理解它在做什么。谢谢Esailija!这很有帮助!:)
for (int i = 0; i < rectArray.Length; i++)
{                      
    sum ^= rectArray[i];
}