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 7 (yapışkan notlar 7) çöp toplama...
Sıralama algoritması tarafından kullan...
Arabiriminin vs SQL bu SERİ...
Java bir Toplama filtresi için en iyi ...