הכרנו בעבר את הפונקציה Select היוצרת אוסף חדש של אובייקטים ע”י “הטלה” כלשהי על האובייקטים הקיימים:
|
|
לפעמים יש לנו את המצב ההפוך: נתונות לנו ההטלות (במקרה שלנו השמות הפרטיים והמשפחה), ואנחנו מעוניינים לבנות אובייקט על פיהן.
כלומר יש לנו רק את firstNames ואת lastNames ולפי זה אנחנו מעוניינים ליצור את people.
(תחשבו שמצב כזה יכול לקרות כאשר אנחנו קוראים את firstNames ואת lastNames ממקור חיצוני, למשל מקובץ או שליפה מDB)
לפי Framework 4.0 היינו צריכים לעשות משהו כזה:
|
|
עובד, אבל לא אלגנטי! (מישהו באמת משתמש בGetEnumerator????)
החל מFramework 4.0 נוכל לעשות זאת באופן יותר פשוט באמצעות הExtension Method שנוסף לSystem.Linq שנקרא Zip:
|
|
הExtension Method מקבל עוד IEnumerable ומאפשר לנו ליצור מכל זוג של איברים (לפי המיקום שלהם), איבר שלישי באמצעות delegate שאנחנו מציינים.
כלומר הוא רץ סימולטנית על שני האוספים שלנו, ומביא לנו בכל איטרציה את האיבר הנוכחי של כל אוסף, ובאמצעות הDelegate מאפשר לנו ליצור איבר חדש. מהאיברים החדשים שנוצרו, מורכב הEnumerable החדש.
מה אם אנחנו מעוניינים לאחד יותר משני אוספים? פתרון אפשרי הוא לקרוא לZip בשלבים. (כמו שפיצלנו בשלבים, כך גם נחבר בשלבים)
סופ"ש טוב (בלי הרבה זיפזופים)