AGGREGATE etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
AGGREGATE etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

29 Ocak 2014 Çarşamba

C# Linq – Aggregate Metodu

Aggregate Metodu


Enumerable sınıfına ait olan ve IEnumerable interfacesini implement eden tüm tiplere uygulanabilen Aggregate metodunu açıklamak istiyorum.
Aggregate metodu aslında bazı işlemleri çok kolay yapılmasını sağlasa da ilk etapda tam olarak nasıl çalıştığını anlamak kafa karıştırıcı olabiliyor. Bu metod, aldığı listenin elemanları üzerinde tek tek işlem yaparak, bir önceki işlem sonucunu bir sonraki elemanın işleme sokulduğu noktaya taşır.
Bunu bir örnek ile anlatmak gerekirse,
List<string> str = new List<string> {"fatih", "mehm", "d", "dd","asdasdad", "45g", "çoookuzunbistring", "dahakısastring" };
string enUzunString = str.Aggregate((x, y) => x.Length > y.Length ? x : y);
 
Console.WriteLine(enUzunString);
 
//Output : çoookuzunbistring
Yukarıdaki örnek, Aggregate metodunu kullanarak, liste içindeki en uzun stringi bulan basit bir kod parçacığıdır.
Burda yapılan işlemi açıklamak gerekirse, Aggregate metodu, liste içinde ilk önce 1. elemanı yani “fatih” stringini ele alır. İlk eleman olduğundan “aggregated value” olarak bu ilk eleman atanır. Daha sonra metod ikinci elemana geçer. Aggregated Value da yapılan ikinci işlem için taşınır. Daha sonra “mehm” strinigini ele alır ve bunun uzunluğu ile taşınan aggregated value uzunluğu karşılaştırılarak sonuç bir sonraki eleman için aktarılır. Bu şekilde liste içindeki tüm elemanlar gezilir.
Sonuç olarak liste içindeki en uzun string bulunur ve enUzunString değişkenine atanır.
List<int> intList = new List<int> {456, 2, 56, 7, 5678, 12, 22, 3, 456789 };
int enBuyuk = intList.Aggregate((a, b) => a > b ? a : b);
 
Console.WriteLine(enBuyuk);
Yine aynı şekilde elemanlar liste içinde taşınan aggregated value ile tek tek karşılaştırılarak en büyük int bulunur.