Έχουν δημοσιευτεί
Σάββατο, 24 Ιανουαρίου 2009 2:37 μμ
από το μέλος
PALLADIN
Εδώ και μια βδομάδα έχω κατεβάσει και παίζω με το 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;
}