Έχουν δημοσιευτεί Σάββατο, 24 Ιανουαρίου 2009 2:37 μμ από το μέλος PALLADIN

Zip Infinity

Εδώ και μια βδομάδα έχω κατεβάσει και παίζω με το VS 2010 και την C# 4.0. Τα Parallel Extensions έχουν μονοπωλήσει την προσοχή μου και
η C# συνεχίζει να προσθέτει νέες cool δυνατότητες.
Αυτό όμως που ήταν μια ευχάριστη "μικρή" έκπληξη είναι μια απλή-ταπεινή μέθοδο στην Enumerable class. Ο λόγος γίνεται για την Zip, μια συνάρτηση που κάνει το εξής απλό:
Παίρνει δυο IEnumerables και κάνει apply ένα lambda στα ζευγάρια-items των sequences, και επιστρέφει ένα enumerable από τα results που "συλλέξαμε", μετά το διαδοχικό application του lambda.
Ένα απλό παράδειγμα νομίζω ότι θα δώσει μια καλύτερη εικόνα.

IEnumerable<string> result = new[] { 1, 2, 3 }.Zip(new[] { "one", "two", "three" }, (first, second) => first + " : " + second);

//result = ["1 : one", "2 : two", "3 : three"]

Αποδίδοντας φόρο τιμής στην Haskell (που με σύστησε με την Zip), αποφάσισα να υλοποιησω σε C# το sequence των Fibonacci.
Ένα από τα πιο όμορφα κομμάτια κώδικα σε Haskell.

fibs = 0 : 1 : [ a + b | (a, b) <- zip fibs (tail fibs)]

static IEnumerable<int> Fib()
{
   yield return 0;
   yield return 1;
   foreach (int number in Fib().Zip(Fib().Skip(1), (first, second) => first + second))
      yield return number;
}

Share


Ενημέρωση για Σχόλια

Αν θα θέλατε να λαμβάνετε ένα e-mail όταν γίνονται ανανεώσεις στο περιεχόμενο αυτής της δημοσίευσης, παρακαλούμε γίνετε συνδρομητής εδώ

Παραμείνετε ενήμεροι στα τελευταία σχόλια με την χρήση του αγαπημένου σας RSS Aggregator και συνδρομή στη Τροφοδοσία RSS με σχόλια

Σχόλια:

Χωρίς Σχόλια

Ποιά είναι η άποψή σας για την παραπάνω δημοσίευση;

(απαιτούμενο)
απαιτούμενο
προαιρετικό
απαιτούμενο
ÅéóÜãåôå ôïí êùäéêü:
CAPTCHA Image