List .ForEach

List<String> menu = new List<String> { "Elma", "Havuç suyu", "Mercimek çorbası" };

menu.ForEach(x => Console.WriteLine(x));

foreach (var item in menu)
{
    Console.WriteLine(item);
}

Bu kullanım şekline Lambda Expression deniyor, eğer Python biliyorsanız oradaki lambda fonksiyonuna benzer bir yazımı vardır ama çalışma şekli Pythonda biraz daha kapsamlı.

# python'da lambda kullanımı örneği
x = lambda a : a + 10
print(x(5))

Elinizdeki listenin içindekileri 4 satır yerine tek satırda (3. satırdaki gibi) yazdırmak isterseniz listenizin sonuna .ForEach() methodunu ekleyebilirsiniz (hatta normal foreach’den yaklaşık 1.7 kat daha hızlı çalışır (not olarak söyleyeyim üşenmez de for ile yaparsanız (YERİNE GÖRE) for döngüsü yaklaşık 1.5 kat daha hızlı olabiliyor, tabi her şeyi de for ile yazdıramazsınız)).

Bu kullanım şeklini biraz daha detayalandırabilirsiniz. Aşağıdaki örneği inceleyin (bu örnek Statement Lambda içerir).

List<int> sayilar = new List<int> { 6, 2, 1, 9, 0, 3, 4, 7, 5, 8, 4, 9 };

sayilar.ForEach(x =>
{
    x = x * x + 2;
    Console.WriteLine(x);
});
Listemdekei sayıların 2 katının 2 fazlasını yazdırmasını kodlamıştım. Tabi listemdeki değerler değişmedi

İlk örnek için hız testi sonuçları:

Döngülerin testleri
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace denemeler
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Test Başladı");

            Testler(1000);
            Testler(5000);
            Testler(10000);
            Testler(50000);
            Testler(100000);
            Testler(500000);
            Testler(1000000);
            Testler(5000000);
            Testler(10000000);
            Testler(50000000);

            Console.WriteLine("Test Bitti");

            Console.ReadLine();
        }

        private static long ToplamFor(List<int> Liste)
        {
            long Sonuc = 0;
            int ListeAdet = Liste.Count;
            for (int iLoop = 0; iLoop < ListeAdet; iLoop++)
            {
                Sonuc += Liste[iLoop];
            }
            return Sonuc;
        }
        private static long ToplamForEach(List<int> Liste)
        {
            long Sonuc = 0;
            foreach (int Rakam in Liste)
                Sonuc += Rakam;

            return Sonuc;
        }
        private static long ToplamForEachExtension(List<int> Liste)
        {
            long Sonuc = 0;
            Liste.ForEach(Rakam => Sonuc += Rakam);

            return Sonuc;
        }
        private static void Testler(int ListeElemanAdet)
        {
            List<long> ForSureler = new List<long>();
            List<long> ForEachSureler = new List<long>();
            List<long> ForEachExtensionSureler = new List<long>();

            List<int> TestVerisi = Enumerable.Range(0, ListeElemanAdet).ToList();

            System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();

            for (int iLoop = 0; iLoop < 10; iLoop++)
            {
                sw.Restart();
                ToplamFor(TestVerisi);
                sw.Stop();
                ForSureler.Add(sw.ElapsedTicks);

                sw.Restart();
                ToplamForEach(TestVerisi);
                sw.Stop();
                ForEachSureler.Add(sw.ElapsedTicks);

                sw.Restart();
                ToplamForEachExtension(TestVerisi);
                sw.Stop();
                ForEachExtensionSureler.Add(sw.ElapsedTicks);
            }

            Console.WriteLine("For Döngüsü ({0} Eleman) : {1}", ListeElemanAdet, ForSureler.Average());

            Console.WriteLine("ForEach Döngüsü ({0} Eleman) : {1}", ListeElemanAdet, ForEachSureler.Average());

            Console.WriteLine("ForEach Extension ({0} Eleman) : {1}", ListeElemanAdet, ForEachExtensionSureler.Average());
        }
    }
}

Test kodları https://enginpolat.com/for-foreach-list-foreach-performans-karsilastirmasi/ ‘dan alıntıdır.

Yazı oluşturuldu 38

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Benzer yazılar

Aramak istediğinizi üstte yazmaya başlayın ve aramak için enter tuşuna basın. İptal için ESC tuşuna basın.

Üste dön