Tek Fotoluk İpucu 76–Bir Listeyi Shuffle’ lamak

Merhaba Arkadaşlar,

Malum hepimizin devasaaa/kocaman boyutlarda MP3 arşivleri var ve genelde müzik dinlerken de uygulamaların shuffle özelliklerini açarak, karışık sırada dinlemeyi tercih ediyoruz. Peki kendi tiplerinize ait generic bir listeyi Shuffle’ layarak kullanmak isteseydiniz, nasıl bir yol izlersiniz? Aşağıdaki gibi olabilir mi? Winking smile

tfi_76

Bir başka ipucunda görüşmek dileğiyle.

Yorumlar (7) -

  • Hocam öncelikle çok güzel bir ipucu olmuş teşekkürler . Ellerinize sağlık.
    Bende projelerimde özellikle unit testler yazımı sırasında generic random kullanma gereksinimi fazlasıyla hissediyorum . Sizin yazınızı görünce yazdığım extention ile benzer olduğunu gördüm Smile Sonrasında biraz konuyu biraz daha incelemek istedim daha farklı nasıl olabilir diye ... Çok farklı ve güzel algoritmalar olduğunu gördüm : Fisher–Yates shuffle.

    Tüm yazılarınızı heyecan ile bekliyoruz Smile Aylık bültenleri arada yine yazabilirseniz çok güzel olur Burak Hocam , okuması çok eğlenceli ...

  • .OrderBy(p=>Guid.NewGuid()) yöntemi de kullanılabilir. Hocam kodları snippets olarak verirseniz kullanımı daha kolay olabilir.
    Kolay gelsin.
  • @Ahmet Aslında çok iyi olur tabi ama burada amaç okurun oturup kodu elle yazmasına zorlamak ;) Ki daha iyi öğrenebilsin ;) Öteki türlü hemen kolaya kaçıyor ve detayları kaçırıyoruz. Hatta belki çok daha iyi bir teknik varsa onu da uygulama ve deneme şansını kaçırıyoruz.

    @Barış Extend edilen aslında IEnumerable<T> tipi. Senin kastettiğin nedir tam olarak?

    @Serkan Fikir fikirleri doğuruyor sevgili Serkan. Örneğin bu örneği gerçekleştirmenin farklı yolları da var, vardır olmalıdır...Buradaki gibi çok yüksek eleman sayısına sahip olmayan listeler için yeterli bir fonksiyonellik ama senin de belirttiğin üzere çok daha büyük boyutlu olan ve performansın öne çıkacağı noktalarda dile getirdiğin ve benzeri algoritmalara yer vermek gerekir.
  • Hocam yazım hatası olmuş Randomizer class'ını kastetmemiştim, extension metodumuz bizden IEnumerable<T> tipinde dönülecek liste ve Random tipinde randomizer istiyor. İşte bu ikinci parametreyi (Random randomizer) istemese direk kendi içinde bir instance alsa ve kullansa  
  • Hımmm anladım ok ;) Kodu o şekilde bir deneyin derim. Eğer bir sıkıntı olmuyorsa elbette o şekilde de kullanabilirsiniz.

  • var t = new List<Team>();
    t.Add(new Team() { Name = "Galatasarat" });
    t.Add(new Team() { Name = "Fenerbahce" });
    t.Add(new Team() { Name = "Besıktas" });
    t.Add(new Team() { Name = "Trabzonspor" });
    t.Add(new Team() { Name = "Real Madrid" });


                var rnd = new Random();
                foreach (var team in t.OrderBy(p => rnd.Next()))
                {
                    Console.WriteLine(team.Name);
                }


    Buda farklı yol

Yorum ekle

Loading