SERİ Toplama algoritması açıkladı
Bu saçma gelebilir, ama Aggregate gerçekten iyi bir açıklama bulmak mümkün olmamıştır.
İyi demek kısa, küçük ve açık bir örnek ile açıklayıcı kapsamlı.
CEVAP
Aggregate tanımı anlamak için en kolay listesindeki her öğe dikkate önce yaşamış operasyonları alarak işlemi gerçekleştirir. İlk ve ikinci öğe üzerinde eylem gerçekleştirir ve sonucu ileri taşır. Önceki sonuca ve üçüncü unsur üzerinde çalışır ve geleceğe taşır. vb.
Örnek 1. Toplama numaraları
var nums = new[]{1,2,3,4};
var sum = nums.Aggregate( (a,b) => a b);
Console.WriteLine(sum); // output: 10 (1 2 3 4)
Bu 1 2 3 yapmak için ekler. Sonra ekler 3 (sonuç) önceki ve 3 (sonraki öğe sırayla) 6 yapmak. Sonra ekler 6 4 10 yapmak.
Örnek 2. dize dizisi bir csv oluşturun
var chars = new []{"a","b","c", "d"};
var csv = chars.Aggregate( (a,b) => a ',' b);
Console.WriteLine(csv); // Output a,b,c,d
Bu kadar aynı şekilde çalışır. a virgül b a,b yapmak için bir arada. Sonra birleştirir virgül ile a,b c a,b,c yapmak. ve benzeri.
Örnek 3. Çoğalarak sayıları bir tohum kullanarak
Bütünlüğü için, tohum bir değer alır Aggregate overload var.
var multipliers = new []{10,20,30,40};
var multiplied = multipliers.Aggregate(5, (a,b) => a * b);
Console.WriteLine(multiplied); //Output 1200000 ((((5*10)*20)*30)*40)
Yukarıdaki örnekler gibi, bu 5 değeri ile başlar ve 50 dizisi 10 sonuç veren ilk elemanı ile çarpar. Bu sonuç, ileri taşıdı ve sıradaki bir sonraki sayı 20 çarpımını 1000 sonucu vermektir. Bu dizinin kalan 2 elemanı ile devam ediyor.
Canlı örnekler: http://rextester.com/ZXZ64749
Dokümanlar: http://msdn.microsoft.com/en-us/library/bb548651.aspx
Ek
Örnek yukarıda 2,, dize birleştirme değerleri virgülle ayrılmış bir listesini oluşturmak için kullanır. Bu cevap niyeti olan Aggregate kullanımını açıklamak için basit bir yoludur. Ancak, eğer bu tekniği kullanarak oluşturmak için gerçekten büyük miktarda virgülle ayrılmış veri, daha ... ... uygun olur kullanmak için StringBuilder, ve bu tamamen uyumludur Aggregate kullanarak seribaşı aşırı yüklemeyi başlatmak StringBuilder.
var chars = new []{"a","b","c", "d"};
var csv = chars.Aggregate(new StringBuilder(), (a,b) => {
if(a.Length>0)
a.Append(",");
a.Append(b);
return a;
});
Console.WriteLine(csv);
Güncelleştirilmiş örnek: http://rextester.com/YZCVXV6464

N içine bir toplama SERİ ile parçaya b...
Java seri hale getirilebilir Dizi Bayt...
Seri hale getirilirken özel üye veri...
UTF-8 gibi bir nesne seri hale XML .NE...
Ne bir özel yapmak için doğru yoldur ....