SORU
18 AĞUSTOS 2011, PERŞEMBE


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
18 AĞUSTOS 2011, PERŞEMBE


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

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • How It Should Have Ended

    How It Shoul

    5 Mart 2007
  • Incredible Tutorials

    Incredible T

    27 EKİM 2006
  • Ralph Phillips

    Ralph Philli

    5 Aralık 2006