Date Image Wednesday, September 2, 2009 | Kategoriler | C#, Tümü

HashSet İle Tekrarlanmayan Değerler İçeren Koleksiyon Oluşturmak

Bugün generic listleri incelerken, en büyük yardımcım msdnde HashSet<T> dikkatimi çekti.Nedenine gelince List<T>’ten çok önemli bir farkla ayrılmasıydı. HashSet’in Add metodu ile koleksiyona bir değer eklenmek istendiğinde bu değerin koleksiyonda var olup olmadığına bakmasıydı. Add metodu geriye bool bir değer geri döndürüyor. Hemen bir örnek yaptım :

class Program

    {

        static void Main(string[] args)

        {

            int count = 1;

            HashSet<string> nameList = new HashSet<string>();

            while (count <= 3)//sadece 3 isim girilmesini istediğimden bir while döngüsü kullandım

            {

                Console.Write("İsim giriniz : ");

                string name = Console.ReadLine();

                if (nameList.Add(name))//eğer koleksiyonda yoksa yani doğrulama true ise

                    count++;

                else // girilen isim koleksiyonda zaten varsa

                    Console.WriteLine("Bu ismi daha önce girdiniz!");

            }

            Console.WriteLine("İsimler :");

            for (int i = 0; i < nameList.Count; i++)

            {

                Console.WriteLine("{0} - {1}",i+1,nameList.Skip(i).Take(1).First<string>());

            }

        }

    }

 

Eklemek istediğim bir şey var; HashSetA ve HashSetB olarak 2 generic listimiz olduğunu varsayarsak bunları UnionWith metodu ile birleştirmeye çalışırsak bir hata vermiyor ve 1. Listte bulunan değerden 2. Listte de varsa 2. Listteki değeri eklemiyor.Örnek verecek olursak :

 

HashSet<string> nameListA = new HashSet<string>();

            nameListA.Add("a"); nameListA.Add("b"); nameListA.Add("c");

 

            HashSet<string> nameListB = new HashSet<string>();

            nameListA.Add("d"); nameListA.Add("a"); nameListA.Add("c");

 

            nameListA.UnionWith(nameListB);

 

            for (int i = 0; i < nameListA.Count; i++)

            {

                Console.WriteLine("{0} - {1}", i + 1, nameListA.Skip(i).Take(1).First<string>());

 

Artık nameListA HashList’inde a,b,c,d değerleri bulunmakta..

 

Etiketler :