none
Dizide En Çok Tekrar Eden 2. Eleman RRS feed

  • Soru

  • Arkadaşlar String bir dizide en çok tekrar eden 2. elemanı nasıl bulabilirim?

    Dizi şu şekilde:

    string[] dizi = { "Kalem", "Kalem", "Silgi", "Defter", "Silgi", "Kalem" };

    22 Temmuz 2019 Pazartesi 15:04

Yanıtlar

Tüm Yanıtlar

  • void Main()
    {
    	string[] dizi = { "Kalem", "Kalem", "Silgi", "Defter", "Silgi", "Kalem" };
    	
    	var sirali = dizi
    		.GroupBy(d => d)
    		.OrderByDescending(d => d.Count())
    		.Select(d => d.Key)
    		.ToList();
    	Console.WriteLine(sirali[1]);
    }



    How to create a Minimal, Reproducible Example
    The way to Go.
    World's most advanced open source (object-) relational Database.
    Flutter (for mobile, for web & desktop.

    • Yanıt Olarak Öneren mehmet bastem 22 Temmuz 2019 Pazartesi 17:28
    • Yanıt Olarak İşaretleyen metehan koray 24 Temmuz 2019 Çarşamba 12:56
    22 Temmuz 2019 Pazartesi 15:12
  • Hocam bu linq yapısı mı oluyor?

    Normal for döngüsü vb. gibi normal yapı ile yapabilir miyim?

    22 Temmuz 2019 Pazartesi 18:59
  • yaparsın ama 2 metre kot yazman gerekir 
    22 Temmuz 2019 Pazartesi 19:56
  • void Main()
    {
    	string[] dizi = { "Kalem", "Kalem", "Silgi", "Defter", "Silgi", "Kalem" };
    	
    	var sirali = dizi
    		.GroupBy(d => d)
    		.OrderByDescending(d => d.Count())
    		.Select(d => d.Key)
    		.ToList();
    	Console.WriteLine(sirali[1]);
    }



    How to create a Minimal, Reproducible Example
    The way to Go.
    World's most advanced open source (object-) relational Database.
    Flutter (for mobile, for web & desktop.

    Maksat çeşit olsun

    string[] dizi = { "Kalem", "Kalem", "Silgi", "Defter", "Silgi", "Kalem" };
    
    var ikinci = dizi.OrderByDescending(x => dizi.Count(y => x == y))
    				 .Distinct()
    				 .Skip(1)
    				 .First();
    
    Console.WriteLine(ikinci);


    www.cihanyakar.com

    • Yanıt Olarak İşaretleyen metehan koray 24 Temmuz 2019 Çarşamba 12:56
    22 Temmuz 2019 Pazartesi 20:08
  • Hocam bu yapılara çalışabileceğimiz kaynak önerebilir misiniz? @CetinBasöz'ün blogunda vardı fakat komple İngilizce olduğu için çok zor oluyor.
    23 Temmuz 2019 Salı 13:55
  • Hocam bu yapılara çalışabileceğimiz kaynak önerebilir misiniz? @CetinBasöz'ün blogunda vardı fakat komple İngilizce olduğu için çok zor oluyor.

    Benim veya Çetin abinin örneğinde ne işe yaradığını bilmediğin method var mı? 


    www.cihanyakar.com

    23 Temmuz 2019 Salı 16:36
  • Hocam bu linq yapısı mı oluyor?

    Normal for döngüsü vb. gibi normal yapı ile yapabilir miyim?

    for döngüsü neden "normal" olup da, Linq ile olursa anormal oluyor?

    C# 3.5'ten beri Linq, dilin bir parçası, zaten anlamı da dile entegre sorgulama (Language INtegrated Query). C# kullanan birisi for, while ... ogreniyorsa, Linq da öğrenmesi gerekiyor.

    Neyse seni rencide etmek icin filan yazmıyorum, onu öğrenmen gerektigini vurgulamaya calisiyorum. Cihan'in dediği gibi, Linq metodları son derece anlasilir, adları üstünde.

    Linq kullanmadan tabii ki yapabilirsin ama Linq ile olduğu kadar kolay olmaz. Bu arada soru net degil, ayni sayıda birden fazla eleman olursa ne olacak. Asagida hem pozisyon hem de sıralamayla ilgili ornek var:

    void Main()
    {
    /*
    	string[] dizi = { 
               "Kalem", "Kalem", "Silgi", 
               "Defter", "Silgi", "Kalem",
               "a", "a", "a",
               "b", "b"
            };
    */
    	string[] dizi = { "Kalem", "Kalem", "Silgi", "Defter", "Silgi", "Kalem" };
    	int kacinci = 2;
    	
    	Console.WriteLine($"By Row: {ByRowNo(dizi, kacinci)}");
    	
    	var byRank = ByRank(dizi,kacinci);
    	Console.WriteLine("By Rank:");
    	foreach (var s in byRank)
    	{
    		Console.WriteLine($"\t{s}");
    	}
    }
    
    private string ByRowNo(IEnumerable<string> dizi, int kacinci)
    {
    	if (dizi.Count() < kacinci)
    	{
    		return null;
    	}
    	Dictionary<string, int> sayimlar = new Dictionary<string, int>();
    	foreach (var s in dizi)
    	{
    		if (sayimlar.ContainsKey(s)) { sayimlar[s]++; }
    		else { sayimlar.Add(s, 1); }
    	}
    	
    
    	var sayiList = sayimlar.ToList();
    	// sayiList.Sort((x, y) => x.Key.CompareTo(y.Key));
    	sayiList.Sort((x, y) => -x.Value.CompareTo(y.Value));
    	return sayiList[kacinci-1].Key;
    }
    
    private List<string> ByRank(IEnumerable<string> dizi, int kacinci)
    {
    	List<string> elemanlar = new List<string>();
    
    	Dictionary<string, int> sayimlar = new Dictionary<string, int>();
    	foreach (var s in dizi)
    	{
    		if (sayimlar.ContainsKey(s)) { sayimlar[s]++; }
    		else { sayimlar.Add(s, 1); }
    	}
    
    	SortedSet<int> sayilar = new SortedSet<int>(sayimlar.Values);
    	if (sayilar.Count >= kacinci)
    	{
    		var sayi = sayilar.Reverse().ToArray()[kacinci-1];
    
    		foreach (var kv in sayimlar)
    		{
    			if (kv.Value == sayi)
    			{
    				elemanlar.Add(kv.Key);
    			}
    		}
    	}
    	return elemanlar;
    }
    

    Not: Benim bloktaki yazıları birisi Turkceye çevirip, buradaki foruma koymuştu. Ne yazık ki kim cevirdi ve linki nerede hatırlamıyorum. (Emre diye hatırlıyorum ama Emre Aras mi degil mi onu hiç hatırlamıyorum). 



    How to create a Minimal, Reproducible Example
    The way to Go.
    World's most advanced open source (object-) relational Database.
    Flutter (for mobile, for web & desktop.

    23 Temmuz 2019 Salı 23:06
  • Hocam bu yapılara çalışabileceğimiz kaynak önerebilir misiniz? @CetinBasöz'ün blogunda vardı fakat komple İngilizce olduğu için çok zor oluyor.

    Benim veya Çetin abinin örneğinde ne işe yaradığını bilmediğin method var mı? 


    www.cihanyakar.com

    @CihanYakar hocam Çetin Bey'in yazdığı kodu kullandım. Tabii gayet kullanışlı ve çok daha kısa çözüm bunun farkındayım. Öğrenilmesi de gerekiyor. Kullanılan kodda ki metotları da biliyorum. Fakat OrderbyDescending(d=>d.Count()) kısmında Count neden yapıldı? Bunu anlamadım. Key ile neye ulaştık bir de bunu açıklarsanız sevinirim.
    24 Temmuz 2019 Çarşamba 13:11
  • dizi.OrderByDescending(x => dizi.Count(y => x == y))

    kullanarak dizideki her x elemanı icin sayım yapılıyor (x = "Kalem" ise dizide "Kalem" olanların sayısı).  Bunlar sayilip azalan sekilde siralaniyor. Sonuc:

    Kalem Kalem Kalem Silgi Silgi Defter

    seklinde bir IEnumerable<string> (IOrderedEnumerable<string>).

    Sonra Distinct ile: Kalem Silgi Defter haline geliyor. Skip(1) ile ilki atlanıp First() ile sonraki alınıyor.

    Key ile benim yazdigimi soruyorsun sanırım. Ben gruplayarak baslamistim, sonra sayıyorum ve grubun Key'ini alıyorum.



    How to create a Minimal, Reproducible Example
    The way to Go.
    World's most advanced open source (object-) relational Database.
    Flutter (for mobile, for web & desktop.

    • Yanıt Olarak İşaretleyen metehan koray 24 Temmuz 2019 Çarşamba 13:42
    24 Temmuz 2019 Çarşamba 13:31
  • Kullanılan kodda ki metotları da biliyorum. 

    Bulacağınız kaynaklarda yerli olsun yabancı olsun metotların ne işe yaradıklarını anlatacak. Bunların probleme göre nasıl bir araya geleceklerini siz akıl yürüterek bulacaksınız. Bunun da tek yolu sürekli hazıra konmamak biraz kafa patlatmaktan ve sistematik çalışmaktan geçiyor. 

    www.cihanyakar.com

    24 Temmuz 2019 Çarşamba 14:15