DCSIMG
operators שימושיים בLINQ ומשמעותם - שחר.נט

שחר.נט

בלוגים שאני קורא

ספרים מומלצים

operators שימושיים בLINQ ומשמעותם

בפוסט זה, אני רוצה להביא כמה אופרטורים פחות מוכרים, אבל שימושיים בLINQ, שיכולים להיות בדיוק אלה שיפתרו לכם בעייה מסויימת ומה תפקידם בעולם.

Skip
האופרטור Skip מאפשר לדלק על מספר מסויים של פריטים ב collection, ולהחזיר רק את אלה שלאחר מכן. הנה דוגמאת שימוש:

   1:  var nums = new[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
   2:  var results = from p in nums.Skip<int>(3)
   3:                select p;
   4:  foreach (var item in results)
   5:  {
   6:                Console.WriteLine(item);
   7:  }
   8:  Console.Read();
.csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; }
בדוגמא הזאת, יודפסו המספרים 4,5,6,7,8 ו-9, כלומר, ישנו דילוג על שלושת הפריטים הראשונים במערך.

Take
למעשה, זה מה שמאפשר את הפעולה ההפוכה. במקום לדלג על הפריטים המסויימים, עם האופרטור הזה נוכל לקחת רק אותם. פשוט, בדוגמא הקודמת שנו את המילה Skip ל- Take.
 
Concat
האופרטור הזה מאפשר לנו לצרף לאיזשהו אוסף נתונים, אוסף נתונים נוסף מה type שמועבר אליו. למשל:
var nums = new[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
var nums2 = new[] {11,12,13,14};
 var results = from p in nums.Concat<int>(nums2)
                       select p;
.csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; }
ה IEnumerable שחוזר, הוא למעשה צירוף של שני הנתונים.
 
Reverse
למעשה, מדובר בדרך לסדר נתונים מהסוף להתחלה. לא מדובר בסידור לפי הגודל, אלא בסדר הכרונולוגי של הנתונים.
var nums = new[] { 1, 2, 3, 10,4, 5, 6, 7, 8, 9 };
            var results = from p in nums.Reverse<int>()
                          select p;
.csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; }
במקרה הזה, הנתונים יוצגו במקום בקריאה משמאל לימין, בקריאה מימים לשמאל.
 
Distinct
מעיף את כל הכפילויות שיש:
var nums = new[] { 1, 2, 3, 10,4, 5, 6, 7, 8, 9,9 };
            var results = from p in nums.Distinct<int>()
                          select p;
במקרה כזה, הספרה 9 תעובד רק פעם אחת.
 
Intersect
 
   1:  var nums = new[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
   2:  var nums2 = new[] {1,6,7,9};
   3:   var results = from p in nums.Intersect<int>(nums2)
   4:                        select p;
   5:  foreach (var item in results)
   6:  {
   7:          Console.WriteLine(item);
   8:  }
   9:  Console.Read();
.csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; }
במקרה זה, יודפס החיתוך בין שני המערכים הנתונים, משמע, רק 1,6,7,9. שימוש ב Except היה מדפיס רק את אלה שלא משותפים בין שני המערכים.
 
Max
מדפיס את הערך המקסימלי במערך:

var nums = new[] {  1,2,3,4,5,6,7,8, 9 };
            Console.WriteLine(nums.Max());

 

עד כאן להפעם!

פורסם: Feb 27 2008, 04:35 PM by שחר גבירץ | with 2 comment(s)
תגים:,
שלח תגובה

(שדה חובה)  

(שדה חובה)  

(אופציונלי)

(שדה חובה) 

Please add 1 and 2 and type the answer here:


Enter the numbers above: