C# Dizilerde Arama Hkn

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    infazteam
    infazteam's avatar
    Kayıt Tarihi: 09/Kasım/2015
    Erkek

    Hayırlı cumalar.

    diziler içinde arama yapmak istiyorum  dizinin içinde yaklaşık 50 bin rakama var .

    dizi içindeki rakam örnek =    5-20-1-2-9-16-22-45-23-8-33-1-2-9-75  bu şekilde olduğunu düşünelim 

     

    programda 3 tane textbox var .

    1'ci textbox  = degeri 1

    2'ci textbox  = degeri 2

    3'ci textbox  = degeri 9

    Program girilen değerleri 1-2-9  dizi içinde arama yapacak , bu sıralamada aynı var ise bu numaradan sonrakini bana göstermesini istiyorum  yani elde etmek istediğim sonuc 16 ve 75 rakamıdır. 

    umarın anlatabilmişimdir.  bu konuda yardım edebilirmisiniz.

     

  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Tawe
    Tawe's avatar
    Kayıt Tarihi: 16/Ağustos/2015
    Erkek
                int Value1 = 1, Value2 = 2, Value3 = 9;
                List<int> ListToSearch = new List<int>() {1, 2, 3};
    
                List<int> indexListFor1 = new List<int>(), 
                          indexListFor2 = new List<int>(), 
                          indexListFor3 = new List<int>(), 
                          resultIndexList = new List<int>();
                for (int i = 0; i < ListToSearch.Count; i++)
                {
                    if (ListToSearch[i] == Value1)
                        indexListFor1.Add(i);
                    else if (ListToSearch[i] == Value2)
                        indexListFor2.Add(i);
                    else if (ListToSearch[i] == Value3)
                        indexListFor3.Add(i);
                }
    
                foreach (var index in indexListFor1)
                {
                    if (indexListFor2.Any(x => x == index + 1) && indexListFor3.Any(x => x == index + 2))
                        resultIndexList.Add(index + 3);
                }

     

    Muhtemelen en efektif yol değildir ama O(n) complexityde aradığın sayıların indexini şu şekilde bulabilirsin

  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Tawe
    Tawe's avatar
    Kayıt Tarihi: 16/Ağustos/2015
    Erkek

    ha bir de aradığın 3'lünün dizinin en sonunda belirmesi durumunda, resultIndexList dizinin boyutundan büyük bir indexi içermiş oluyor. o bug'u düzeltmek gerek :D

  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    saybirs
    saybirs's avatar
    Kayıt Tarihi: 24/Temmuz/2009
    Erkek

    buyur hocam;

      List<int> _numberList = new List<int>();
    
                _numberList.AddRange(new int[] { 5, 20, 1, 2, 9, 16, 22, 45, 23, 8, 33, 1, 2, 9, 75 });
    
                int textBox1 = 1;
                int textBox2 = 2;
                int textBox3 = 9;
    
                List<int> bulunanList = new List<int>();
    
                //Bilale anlatır gibi anlatıyorum!
                for (int i = 0; i < _numberList.Count; i++) //list kadar dön
                {
                    if (_numberList[i] == textBox1) //diziden gelen değer textbox1 (1) eşitse 1 rakamını bulmuşuzdur demektir.
                    {
                        if (_numberList[i + 1] == textBox2) // 1 rakamından sonraki gelen rakama bakalım textBox2 (2) sayısı mı ? +1 dememizin sebebi bir sonraki sayı anlamında.
                        {
                            if (_numberList[i + 2] == textBox3) //2 rakamından sonraki gelen rakama bakalım textBox3 (9) sayısı mı ? +2 dememizin sebebi 2 sonraki sayı anlamında
                            {
                                //şakkadanak bulduk bir sonraki rakamını istiyorduk (16,75 etc.) alalım hemen
                                int Deger = _numberList[i + 3]; //+3 dememizin sebebi 3 sonraki sayıyı getir anlamında
                                bulunanList.Add(Deger);
                            }
                        }
                    }
                }

     

    saybirs tarafından 28/Eyl/18 16:12 tarihinde düzenlenmiştir
  5. KısayolKısayol reportŞikayet pmÖzel Mesaj
    infazteam
    infazteam's avatar
    Kayıt Tarihi: 09/Kasım/2015
    Erkek
    Tawe bunu yazdı

    ha bir de aradığın 3'lünün dizinin en sonunda belirmesi durumunda, resultIndexList dizinin boyutundan büyük bir indexi içermiş oluyor. o bug'u düzeltmek gerek :D

    hocam mümkün ise müsait bir anda yazabilirmisin. 

    http://s3.dosya.tc/server17/zb8y4q/sayilar.txt.html   numaralar burada

     

     

     

     List<int> lst = new List<int>();
            int[] integerArray = new int[500000];
            private void Form1_Load(object sender, EventArgs e)
            {
             
                int contor = 0;
                string[] stringArray = System.IO.File.ReadAllLines(@"C:\data\sayılar.txt");
                foreach (string example in stringArray)
                {
                    lst.Add(Convert.ToInt32(example.Trim()));
                    integerArray[contor] = Convert.ToInt32(example.Trim());
                    ++contor;
                }
            }

     

  6. KısayolKısayol reportŞikayet pmÖzel Mesaj
    infazteam
    infazteam's avatar
    Kayıt Tarihi: 09/Kasım/2015
    Erkek
    saybirs bunu yazdı

    buyur hocam;

      List _numberList = new List();
    
                _numberList.AddRange(new int[] { 5, 20, 1, 2, 9, 16, 22, 45, 23, 8, 33, 1, 2, 9, 75 });
    
                int textBox1 = 1;
                int textBox2 = 2;
                int textBox3 = 9;
    
                List bulunanList = new List();
    
                //Bilale anlatır gibi anlatıyorum!
                for (int i = 0; i < _numberList.Count; i++) //list kadar dön
                {
                    if (_numberList[i] == textBox1) //diziden gelen değer textbox1 (1) eşitse 1 rakamını bulmuşuzdur demektir.
                    {
                        if (_numberList[i + 1] == textBox2) // 1 rakamından sonraki gelen rakama bakalım textBox2 (2) sayısı mı ? +1 dememizin sebebi bir sonraki sayı anlamında.
                        {
                            if (_numberList[i + 2] == textBox3) //2 rakamından sonraki gelen rakama bakalım textBox3 (9) sayısı mı ? +2 dememizin sebebi 2 sonraki sayı anlamında
                            {
                                //şakkadanak bulduk bir sonraki rakamını istiyorduk (16,75 etc.) alalım hemen
                                int Deger = _numberList[i + 3]; //+3 dememizin sebebi 3 sonraki sayıyı getir anlamında
                                bulunanList.Add(Deger);
                            }
                        }
                    }
                }

     

    teşekür ederim hocam çok sağol tam istediğim gibi. 

  7. KısayolKısayol reportŞikayet pmÖzel Mesaj
    herlocksholmes
    herlocksholmes's avatar
    Kayıt Tarihi: 16/Şubat/2014
    Erkek
    saybirs bunu yazdı

    buyur hocam;

      List _numberList = new List();
    
                _numberList.AddRange(new int[] { 5, 20, 1, 2, 9, 16, 22, 45, 23, 8, 33, 1, 2, 9, 75 });
    
                int textBox1 = 1;
                int textBox2 = 2;
                int textBox3 = 9;
    
                List bulunanList = new List();
    
                //Bilale anlatır gibi anlatıyorum!
                for (int i = 0; i < _numberList.Count; i++) //list kadar dön
                {
                    if (_numberList[i] == textBox1) //diziden gelen değer textbox1 (1) eşitse 1 rakamını bulmuşuzdur demektir.
                    {
                        if (_numberList[i + 1] == textBox2) // 1 rakamından sonraki gelen rakama bakalım textBox2 (2) sayısı mı ? +1 dememizin sebebi bir sonraki sayı anlamında.
                        {
                            if (_numberList[i + 2] == textBox3) //2 rakamından sonraki gelen rakama bakalım textBox3 (9) sayısı mı ? +2 dememizin sebebi 2 sonraki sayı anlamında
                            {
                                //şakkadanak bulduk bir sonraki rakamını istiyorduk (16,75 etc.) alalım hemen
                                int Deger = _numberList[i + 3]; //+3 dememizin sebebi 3 sonraki sayıyı getir anlamında
                                bulunanList.Add(Deger);
                            }
                        }
                    }
                }

     

    1.deger uyarsa, +1, +2  bakmak yerine, bir sonrakinde 2.iyi, o da olursa 3.yu arasan daha performansli olur. boylece dongu sadece 1 kere donmus olur.


  8. KısayolKısayol reportŞikayet pmÖzel Mesaj
    saybirs
    saybirs's avatar
    Kayıt Tarihi: 24/Temmuz/2009
    Erkek
    herlocksholmes bunu yazdı
    saybirs bunu yazdı

    buyur hocam;

      List _numberList = new List();
    
                _numberList.AddRange(new int[] { 5, 20, 1, 2, 9, 16, 22, 45, 23, 8, 33, 1, 2, 9, 75 });
    
                int textBox1 = 1;
                int textBox2 = 2;
                int textBox3 = 9;
    
                List bulunanList = new List();
    
                //Bilale anlatır gibi anlatıyorum!
                for (int i = 0; i < _numberList.Count; i++) //list kadar dön
                {
                    if (_numberList[i] == textBox1) //diziden gelen değer textbox1 (1) eşitse 1 rakamını bulmuşuzdur demektir.
                    {
                        if (_numberList[i + 1] == textBox2) // 1 rakamından sonraki gelen rakama bakalım textBox2 (2) sayısı mı ? +1 dememizin sebebi bir sonraki sayı anlamında.
                        {
                            if (_numberList[i + 2] == textBox3) //2 rakamından sonraki gelen rakama bakalım textBox3 (9) sayısı mı ? +2 dememizin sebebi 2 sonraki sayı anlamında
                            {
                                //şakkadanak bulduk bir sonraki rakamını istiyorduk (16,75 etc.) alalım hemen
                                int Deger = _numberList[i + 3]; //+3 dememizin sebebi 3 sonraki sayıyı getir anlamında
                                bulunanList.Add(Deger);
                            }
                        }
                    }
                }

     

    1.deger uyarsa, +1, +2  bakmak yerine, bir sonrakinde 2.iyi, o da olursa 3.yu arasan daha performansli olur. boylece dongu sadece 1 kere donmus olur.

    :) teşekkürler, yeni programlamaya başlayacak junior arkadaşlar için önerin ışık kaynağı olabilir. Kodu yazarken bir sonraki değerler için fazladan döneceğini farkettim canlıya çıkacak kod bloğu olmadığından uzatmaya gerek duymadım, sonuçta arkadaş projesine ekleyip geçecek. Performans olarak değerlendirirsek, List yerine HashSet, tek thread yerine multithread etc. diyerek çoğaltabiliriz :)

     

    saybirs tarafından 28/Eyl/18 17:47 tarihinde düzenlenmiştir
Toplam Hit: 317 Toplam Mesaj: 8
c# araylist diziler