Ahad Siddiqui Ahad Siddiqui - 1 month ago 20
C# Question

Intersection of two int array in C#

I am trying to find the intersection of two int array . I am using this code :

public int[] Find_Common_Elements(int[] p1, int[] p2)
{
int count = 0;
for (int i = 0; i < p1.Length; i++)
{
for (int j = 0; j < p2.Length; j++)
{
if (p1[i] == p2[j])
{
count++;
break;
}
}
}

int[] result = new int[count];
count = 0;
for (int i = 0; i < p1.Length; i++)
{
for (int j = 0; j < p2.Length; j++)
{
if (p1[i] == p2[j])
{
result[count++] = p1[i];
break;
}
}
}

return result;
}

public int[] BubbleSort(int[] numarray)
{
int max = numarray.Length;
for (int i = 1; i < max; i++)
{
for (int j = 0; j < max - i; j++)
{

if (numarray[j] > numarray[j + 1])
{
int temp = numarray[j];
numarray[j] = numarray[j + 1];
numarray[j + 1] = temp;
}
}
}
return numarray;
}

public int[] Find_Unique_Elements(int[] numarray)
{
BubbleSort(numarray);
int element = numarray[0];
int count = 1;
for (int i = 1; i < numarray.Length; i++)
{
if (element == numarray[i])
continue;
else
{
element = numarray[i];
count++;
}
}

int[] result = new int[count];

count = 0;
element = numarray[0];
result[count++] = element;
for (int i = 1; i < numarray.Length; i++)
{
if (element == numarray[i])
continue;
else
{
element = numarray[i];
result[count++] = element;
}
}
return result;
}

public void Result()
{
int[] array1 = new int[] { 10, 20, 30, 40, 50, 60, 70, 80, 90, 100,
95, 85, 75, 65, 55, 45, 35, 25, 15, 05,
10, 15, 20, 25, 30, 35, 40, 45, 50, 55
};

int[] array2 = new int[] { 15, 25, 35, 45, 55,
12, 22, 32, 43, 52,
15, 25, 35, 45, 55
};

int[] p1 = Find_Unique_Elements(array1);
int[] p2 = Find_Unique_Elements(array2);
int[] result = Find_Common_Elements(array1, array2);

for (int i = 0; i < p1.Length; i++)
textBox1.Text += "\n" + p1[i].ToString();
for (int i = 0; i < p2.Length; i++)
textBox2.Text += "\n" + p2[i].ToString();
for (int i = 0; i < result.Length; i++)
textBox3.Text += "\n"+result[i].ToString();
}








private void button1_Click(object sender, RoutedEventArgs e)
{
Result();
}


But the problem is that, the result obtained is 15 15 25 25 35 35 45 45 55 55 , and i want 15 25 35 45 55. what is the problem with this code ?
Thanks for any help

Answer

You can use the built-in Linq Intersect extension method for this:

using System.Linq; // Make sure you include this line

public int[] Find_Common_Elements(int[] p1, int[] p2)
{
    return p1.Intersect(p2).ToArray();
}