C# diziler nelerdir? Jenerik tipler nelerdir?

xavier eckert

Basın&Medya Ekibi Kıdemli
16 Tem 2016
1,637
288
Varlik-524b8adeb34b09a313.png


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.

r83ab9f.png

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;
projenizin en üstüne yazarak Koleksiyonları kullanmaya başlayabilirsiniz.Koleksiyonlarda sadece Generics Kısmını anlatacağım yoksa uzar gider...

5zw4sb7.png


1. Dictionary <TKey, TValue>
j1byljt.png

Dictionary sınıfının metot ve özellikleri​
Dictionary<TKey, TValue>, anahtar/değer çiftlerini belirli bir sırada depolayan bir koleksiyondur.

ozuacdb.png

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>
tlfdq8g.png

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.
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>
7hm1kfm.png

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.

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>
8vqtn2r.png

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.

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>
86xqa4c.png

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.
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.
Varlik-17fbc151bace9a6a31.png

Varlik-97709137819b24d109.png
 

Grimner

Adanmış Üye
28 Mar 2020
6,309
4,760
PC bozmasaydim güzel c# çalışırdim
İşletim sistemini kurcalamasan bir şey olmazdı :/

Varlik-524b8adeb34b09a313.png


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.

r83ab9f.png

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;
projenizin en üstüne yazarak Koleksiyonları kullanmaya başlayabilirsiniz.Koleksiyonlarda sadece Generics Kısmını anlatacağım yoksa uzar gider...

5zw4sb7.png


1. Dictionary <TKey, TValue>
j1byljt.png

Dictionary sınıfının metot ve özellikleri​
Dictionary<TKey, TValue>, anahtar/değer çiftlerini belirli bir sırada depolayan bir koleksiyondur.

ozuacdb.png

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>
tlfdq8g.png

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.
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>
7hm1kfm.png

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.

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>
8vqtn2r.png

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.

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>
86xqa4c.png

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.
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.
Varlik-17fbc151bace9a6a31.png

Varlik-97709137819b24d109.png
Eline sağlık.
 

rootibo

Kıdemli Üye
13 Mar 2023
2,168
1,459
Varlik-524b8adeb34b09a313.png


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.

r83ab9f.png

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;
projenizin en üstüne yazarak Koleksiyonları kullanmaya başlayabilirsiniz.Koleksiyonlarda sadece Generics Kısmını anlatacağım yoksa uzar gider...

5zw4sb7.png


1. Dictionary <TKey, TValue>
j1byljt.png

Dictionary sınıfının metot ve özellikleri​
Dictionary<TKey, TValue>, anahtar/değer çiftlerini belirli bir sırada depolayan bir koleksiyondur.

ozuacdb.png

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>
tlfdq8g.png

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.
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>
7hm1kfm.png

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.

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>
8vqtn2r.png

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.

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>
86xqa4c.png

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.
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.
Varlik-17fbc151bace9a6a31.png

Varlik-97709137819b24d109.png
hocam emeginize saglik
 

Helmsys

Yazılım Ekibi Kıdemli
16 Mar 2022
1,492
1,652
var kelimetest2 = thtKelimeListe.FirstOrDefault(x => x.Equals("ares"));
Bu ifade tam olarak şu şekilde mi yorumlanıyor?

x, liste elemanı
(ilk) eleman "ares" mi kontrolü yapılıyor
FirstOrDefault methodu da bu koşula uyan bir liste elemanı varsa onu, yoksa listenin kendisini döndürüyor.

Eğer anladıysam sevinebilirim, çünkü x => x.Equals("ares") bu ve benzeri lambda ifadeleri anlamakta güçlük çekiyorum.

Elinize emeğinize sağlık.
 

xavier eckert

Basın&Medya Ekibi Kıdemli
16 Tem 2016
1,637
288
Bu ifade tam olarak şu şekilde mi yorumlanıyor?

x, liste elemanı
(ilk) eleman "ares" mi kontrolü yapılıyor
FirstOrDefault methodu da bu koşula uyan bir liste elemanı varsa onu, yoksa listenin kendisini döndürüyor.

Eğer anladıysam sevinebilirim, çünkü x => x.Equals("ares") bu ve benzeri lambda ifadeleri anlamakta güçlük çekiyorum.

Elinize emeğinize sağlık.
Listenin kendisini döndürmüyor. Default değer verirsek o değer dönüyor, yoksa boş dönüyor. Lambda expression kafa karıştırıcı biraz. Orada sanal bir x değişkeni oluşturup foreach gibi liste içerisinde tek tek istediğin sorguya göre dolaşıyor.
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.