Dizilerde Birleşim(Union) ve Kesişim(Intersection) işlemlerini aşağıdaki şekilde yapabiliriz.
Öncelikle iki adet int tipinde dizi tanıyoruz ve bu dizilere değerler atıyoruz. Değer atama işlemini kullanıcı yapacak şekilde düzenleyebilirsiniz.
int[] Array1 = { 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,15,17,19,18,25,122,23 };
int[] Array2 = {3, 4, 5, 6, 7, 8, 9,13,15,18,12,23,122,51,25,1907,251 };
InterSection metodu ile dizilerde kesişim işlemini yapıyoruz.
public static int[] InterSection(int[] a, int[] b)
{
int[] InterSection1;
if(a.Length>b.Length)
InterSection1= new int[a.Length];
else
InterSection1= new int[b.Length];
int count=0;
for (int i = 0; i < a.Length; i++)
{
for (int j = 0; j < b.Length; j++)
{
if (a[i] == b[j])
{
InterSection1[count] = a[i];
count++;
}
}
}
return InterSection1;
}
Intersection- Kesişim olayını yazdırıyoruz.
foreach (int item in InterSection(Array1, Array2))
{
Console.WriteLine(item);
}
Console.WriteLine("Used to InterSection\r\n\r\n");
Union-Birleşim olayını bu metod ile yapıyoruz.
public static int[] Union(int[] a, int[] b)
{
int[] union = new int[a.Length + b.Length];
int count=0;
foreach (int itemA in a)
{
union[count] = itemA;
count++;
}
int[] newnumber=new int[b.Length];
foreach (int itemU in union)
{
for (int i = 0; i < b.Length; i++)
{
if (itemU == b[i])
{
newnumber[i] = i;
break;
}
}
}
for (int i = 0; i < b.Length; i++)
{
if (i != newnumber[i])
{
union[count] = b[i];
count++;
}
}
return union;
}
Ekrana yazdırma işlemi de aynı Intersection(Kesişim) işleminde olduğu gibi olacak.
foreach (int item in Union(Array1,Array2))
{
if(item!=0)
Console.WriteLine(item);
}
Console.WriteLine("Used to Union");
Console.ReadKey();
Union(Birleşim) metodunu kısacak açıklamak gerekirse "a" dizisindeki tüm elemanları "union" dizisine atıyoruz ve ardından bu dizideki elemanlarının hangilerinin "b" dizisnde mevcut olduğunu tespit ediyoruz. "b" dizisinde varolan elemanların indis numarasını "newnumber" adında oluşturduğumuz yeni bir diziye indisleriyle atıyoruz. Son olarak "b" dizisinde eklenmeyen elemanları "union" dizisine ekleyerek işlemi tamamlıyoruz.
Tabii ki alternatif ve tek satırlık yöntemler de yok değil ki yukardaki vb. yöntemleri seçmek de o şekilde istenmediği sürece mantıklı olmayacak.
Tek satırlık "InterSect" ve "Union" kodları şu şekilde;
int[] Array1 = { 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,15,17,19,18,25,122,23 };
int[] Array2 = {3, 4, 5, 6, 7, 8, 9,13,15,18,12,23,122,51,25,1907,251 };
var Arrays = Array1.Union(Array2);
var Arrays2 = Array1.Intersect(Array2);
"Arrays" ve "Arrays" iki dizilerindeki elemanları çekerek ekranda gösterebilirsiniz.