- 16 Tem 2016
- 1,641
- 295
C# diziler nelerdir? Jenerik tipler nelerdir?
Bir sabit değeri depolamak için bir değişken kullanılırken, birden çok değişmez değeri depolamak için bir dizi kullanılır. Bir dizi, aynı veri türünden sabit sayıda ve sabit değerde nesneleri depolayan veri yapısıdır. Dizi öğeleri, bellekte bitişik olarak depolanır.
Gerçek hayattan örnek verirsek;
30 yumurtamızı bir kutu içerisinde mi yoksa tek tek mi taşımak bize daha az yük olur?
Aynı şekilde çokça veriyi toplu bir şekilde tutabilmek ve istediğimiz zaman performanslı bir şekilde erişmemiz için diziler bizim için çok öneml
Şimdi bir dizinin nasıl oluştuğunu, özelliklerini ve metotlarını öğrenelim.
C#:
string[] thtKelimeListe = { "xaviereckert", "ares", "arslan'","ranger", "kaptantr"};
int[] thtSayiListe = { 1, 2, 3, 4, 5, 6, 7, 8 };
char[] thtHarfListe = { 'x', 'a', 'v', 'i', 'e', 'r' };
bool[] thtDogruYanlisListe = { true, false, true };
double[] thtOndalikliSayiLise = { 1.45, 5.12, 6321.4, 23 }; // ondalıklı sayılar int tipindeki sayıları da kapsadığı için bir sorun olmaz.
object[] objeListesi = {"xavier", 1465, true, 'e'};
string biraz farklı bir yapıdır. Kendisini char listesi olarak da tanımlayabiliriz.
char[] thtHarfListe = { 'x', 'a', 'v', 'i', 'e', 'r' };
string xavier = thtHarfListe.ToString();
Bu diziler haricinde çok boyutlu diziler de var.
C#:
string[,] tht2DKelimeListe = {{"xavier","eckert"}, {"aslan'","bürküt"}};
string[,,,] tht3DKelimeListe ={{"xavier","eckert","1"}, {"aslan'","bürküt","1"}, {"ares","kral","1"}};
int[,] sayiListe = new int[3,2]{ { 1, 2 }, { 3, 4 }, { 5, 6 } }
Bir de düzensiz bir dizi oluşturalım
C#:
int[][] duzensizListe =
{
new int[] { 1, 3, 5, 7, 9 },
new int[] { 0, 2, 4, 6 },
new int[] { 11, 22 }
};
Az çok dizilerden bahsettik. Burada önemli bir detay var. Boş bir dizeye çokça değer ekledik.
C#:
int[] thtSayiListe = new int[5]{1,2,3,4,5}; // 5 elemanlı bir dizi oluşturduk. Bu dizinin her bir elemanın bir index numarası var. Bu index numarası 0 dan başlıyor. Koordinat olarak düşünürseniz aklınıza yatacaktır.
Dizi içerisindeki bir sayıyı alalım. Dizi içerisindeki ilk ve son değerleri alalım.
C#:
int[] thtSayiListe = { 1, 2, 3, 4, 5, 6, 7, 8 };
int ilkSayi = thtSayiListe[0];
int sonSayi = thtSayiListe[^1];
int sondanIkinciSayi = thtSayiListe[^2]
Şimdi ise bütün elemanları konsol ekranına yazdıran bir program yazalım
C#:
string[] thtKelimeListe = { "xaviereckert", "ares", "arslan'","ranger", "kaptantr"};
for(int i=0; i< thtKelimeListe.Length; i=i+1){
Console.WriteLine($"{thtKelimeListe[i]}");
}
Çıktı :
xaviereckert
ares
arslan
ranger
kaptantr
int[][] duzensizListe =
{
new int[] { 1, 3, 5, 7, 9 },
new int[] { 0, 2, 4, 6 },
new int[] { 11, 22 }
};
foreach (var eleman in duzensizListe)
{
foreach (var item in eleman)
{
Console.Write(item+"\t");
}
Çıktı:
1 3 5 7 9 0 2 4 6 11 22
}
Dizilerin başlangıç olarak anladığınızı düşünüyorum. Şimdi bu dizilere ait en çok kullanılan metotların ne iş yaptığını görelim.
C#:
string[] thtKelimeListe = { "xaviereckert", "ares", "arslan'", "kaptantr", "arsss"};
var kelimetest1 = thtKelimeListe.First(x => x.Contains("ar"));
var kelimetest2 = thtKelimeListe.FirstOrDefault(x => x.Equals("ares"));
var kelimetest3 = thtKelimeListe.FirstOrDefault(x => x.StartsWith("k"));
var kelimetest4 = thtKelimeListe.FirstOrDefault();
var kelimetest5 = thtKelimeListe.GetValue(0);
var kelimetest6 = thtKelimeListe.GetLowerBound(0); // burada birden fazla boyut var ise istediğimiz boyutun indexini yazınız.
var kelimetest7 = thtKelimeListe.GetType();
var kelimetest8 = thtKelimeListe.GetLength(0); // burada birden fazla boyut var ise istediğimiz boyutun indexini yazınız.
var kelimetest9 = thtKelimeListe.Length();
Console.WriteLine($"Kelime Listesinde içerisinde 'ar' bulunan ilk değer yoksa hata döner : {kelimetest1}");
Console.WriteLine($"Kelime Listesinde içerisinde 'ares' olan ilk değer yok ise boş veya default değer dön: {kelimetest2}");
Console.WriteLine($"Kelime Listesinde içerisinde ilk harfi 'k' olan ilk değer yok ise boş dön: {kelimetest3}");
Console.WriteLine($"Kelime Listesinde içerisindeki ilk değeri döndür: {kelimetest4}");
Console.WriteLine($"Kelime Listesinde içerisindeki belirtilen indexteki döndür: {kelimetest5}");
Console.WriteLine($"Dizenin sıfırıncı boyutundaki en düşük sayı değerini döndür: {kelimetest6}");
Console.WriteLine($"Kelime Listesinin veri tipini döndürür: {kelimetest7}");
Console.WriteLine($"Kelime Listesinin ilk boyutunun kaç elemana sahip olduğunu döndürür :{kelimetest8}");
Console.WriteLine($"Kelime listesinin toplam eleman sayısını getirir : {kelimetest9}");
Evett aklınıza yattı ise sizlere bir basamak üste çıkaracak veri yapılarını anlatacağım. Koleksiyonlar. Koleksiyonlar, nesne gruplarıyla çalışmak için daha esnek bir yol sağlar.Dizilerden farklı olarak, birlikte çalıştığınız nesne grubu, uygulamanın gereksinimleri değiştikçe dinamik olarak büyüyebilir ve küçülebilir. Bazı koleksiyonlar için, anahtarı kullanarak nesneyi hızlı bir şekilde alabilmeniz için koleksiyona yerleştirdiğiniz herhangi bir nesneye anahtar atayabilirsiniz.
Koleksiyonlar sınıf olduklarından dolayı bir örnek oluşturmanız gerekmektedir. Öncelikle koleksiyonları projenizde kullanabilmeniz için
C#:
using System.Collections;
1. Dictionary <TKey, TValue>
Dictionary sınıfının metot ve özellikleri
Dictionary türünden iki tane nesne örneği
C#:
Dictionary<int,string> anahtarliListe = new Dictionary<int, string>();
anahtarliListe.Add(1, "xavier");
anahtarliListe.Add(2, "ares");
anahtarliListe.Add(3, "kaptantr");
anahtarliListe.Remove(3);
anahtarliListe.Add(3, "mert");
Console.WriteLine(anahtarliListe.ContainsKey(5));
foreach (KeyValuePair<int,string> item in anahtarliListe)
{
Console.WriteLine($"id: {item.Key}, değer: {item.Value}");
}
Dictionary<string,Personel> personelList = new();
personelList.Add("admin",new Personel(1,"Ares",1));
personelList.Add("moderatör", new Personel(1, "xaviereckert", 8));
foreach (KeyValuePair<string,Personel> personel in personelList)
{
Console.WriteLine($"Görev: {personel.Key}, Nick: {personel.Value.name}");
}
personelList.Clear();
public class Personel
{
public int id { get; set; }
public string name { get; set; }
public int departmanId { get; set; }
public Personel(int id, string name, int departmanId)
{
this.id = id;
this.name = name;
this.departmanId = departmanId;
}
}
2. List<T>
List sınıfının metot ve özellikleri
Dizin tarafından erişilebilen nesnelerin kesin olarak belirlenmiş bir listesini temsil eder. Listeleri aramak, sıralamak ve işlemek için yöntemler sağlar.List sınıfının metot ve özellikleri
C#:
Personel personel1 = new Personel(1, "mert", 8);
List<Personel> list = new List<Personel>();
List<Personel> list2 = new List<Personel>();
list2.add(new Personel(2000,"testaccount", 20));
list.Add(new Personel(1000, "xaviereckert", 8));
list.Add(new Personel(1001, "ares", 1));
list.Add(new Personel(1002, "arslan'", 5));
list.Add(new Personel(1003, "kaptantr", 3));
list.AddRange(list2); // List dizesine ikinci bir liste eklemekteyiz.
Console.WriteLine(list.Capacity);
Console.WriteLine(list.Count); //eleman sayımızı belirtir.
Console.WriteLine(list.Contains(personel1)); //personel1 değişkenimizi var mı yok mu kontrol ediyor varsa True, yoksa False yazacaktır.
for (int i = 0; i < list.Count; i++)
{
Console.WriteLine(list[i].name);
}
public class Personel
{
public int id { get; set; }
public string name { get; set; }
public int departmanId { get; set; }
public Personel(int id, string name, int departmanId)
{
this.id = id;
this.name = name;
this.departmanId = departmanId;
}
}
3. Queue<T>
Queue sınıfının metot ve özellikleri
İlk giren ilk çıkar mantığıyla çalışan yani kuyruk mantığıyla çalışan jenerik dizilerdir.Queue sınıfının metot ve özellikleri
C#:
Personel personel1 = new Personel(2, "ares", 1);
Queue<Personel> personels = new Queue<Personel>();
List<Personel> personels1 = new List<Personel>();
personels.Enqueue(new Personel(1, "xavier", 8));
personels.Enqueue(personel1);
personels.Enqueue(new Personel(3, "kaptantr", 4));
personels.Enqueue(new Personel(4, "arslan'", 5));
personels.Enqueue(new Personel(5, "ghostkiller'", 5));
personels.Enqueue(new Personel(6, "bürküt'", 6));
personels.Peek(); // Dizenin baştaki nesneyi siler.
personels.Clear (); // içerideki tüm nesneleri kaldırır.
Console.WriteLine(personels.Contains(personel1)); // personel1 adında biri var mı true/false geri dönüş bildirir.
personels1.AddRange(personels.ToArray()); // Nesneleri Queue'den List'e aktarış
for (int i = 0; i < personels1.Count; i = i + 1) //List yapısının içerisindeki nesneleri okur.
{
Console.WriteLine(personels1[i].name + " LIST");
}
//Console.WriteLine(personels.Count);//Kuyruktaki tüm nesnelerin sayısını belirtir.
personels.Dequeue(); // kuyruk başındaki nesneyi kaldırır.
foreach (var item in personels) // Queue içerisindeki nesneleri okur.
{
Console.WriteLine(item.name + " QUEUE");
}
4. SortedList<TKey, TValue>
SortedList sınıfının metot ve özellikleri
SortedList<TKey, TValue> ve SortedList, ilişkili IComparer uygulamasına göre anahtarlara göre sıralanan anahtar-değer çiftlerini depolayabilen koleksiyon sınıflarıdır. Örneğin, anahtarlar ilkel türlerdeyse, artan anahtar sırasına göre sıralanır.SortedList sınıfının metot ve özellikleri
C#:
List<string> stringList = new List<string>();
SortedList<int,string> valuePairs = new SortedList<int,string>();
valuePairs.Add(1000, "xavier");
valuePairs.Add(1001, "ares");
valuePairs.Add(1002, "kaptantr");
valuePairs.Remove(2); // 2. indexteki nesneyi siler.
//valuePairs.Clear(); // listeyi tamamen siler
foreach (var item in valuePairs) Console.WriteLine(item); // SortedList verilerini yazar.
foreach (var pair in valuePairs) //SortedList verilerini List'e aktarıldı.
{
stringList.Add($"{pair.Value}-{pair.Key}");
}
foreach (var pair in stringList) // List okunuyor.
{
Console.WriteLine(pair);
}
5. Stack<T>
Stack sınıfının metot ve özellikleri
Yığın, nesneleri Son Giren İlk Çıkar prensibiyle depolayan özel bir koleksiyon türüdür.Stack sınıfının metot ve özellikleri
C#:
Stack<object> yiginList = new Stack<object> { };
yiginList.Push("xaviereckert");
yiginList.Push(1);
yiginList.Push(new Personel(1,"ares",1));
yiginList.Push("ares");
yiginList.Pop(); // yığının içerisindeki baştaki elemanı siler.
Console.WriteLine(yiginList.Peek()); // Yığının içerisindeki baştaki elemanı döndürür.
foreach (var item in yiginList) Console.WriteLine(item);
public class Personel
{
public int id { get; set; }
public string name { get; set; }
public int departmanId { get; set; }
public Personel(int id, string name, int departmanId)
{
this.id = id;
this.name = name;
this.departmanId = departmanId;
}
}
Bazı Sınıflar benzer bazı sınıfların farklı bazı sınıflarda aynı metotlar ve özellikler var. Hepsi aynı amaca hizmet ediyor fakat ihtiyaca göre, performansa göre, sıralama çeşitlerine göre her biri farklı arayüzleri implemente etmekte. Yani farklı alanlarda güçlü hepsi... Sizleri çok sıkmadan çok detaya girmeden anlatmak istedim. Gözden kaçan yerler olmuştur muhakkak, bildirirseniz sevinirim. Görseller bana aittir. Okuduğunuz için teşekkürler.