המר את ה-C# LINQ למילון

Hmr T H C Linq Lmylwn



ב-C# LINQ, יצירת מילון מ System.Collections.Generic.IEnumerable אפשרי באמצעות שיטת ToDictionary() . שיטה זו יוצרת מילון עם מתוך הנתון. ה System.ArgumentNullException נזרק אם מקור הנתונים, keySelector או elementSelector הוא null. כמו כן, אם keySelector מייצר מפתחות כפולים עבור שני אלמנטים, ה- System.ArgumentException נזרק. במדריך זה, נדון כיצד ליצור מילון ממקור הנתונים ברשימה על ידי העמסת יתר של שתי שיטות.

תחביר:

1. אם ברצונך ליצור מילון לפי פונקציות בורר המפתח ובורר האלמנטים שצוינו ממקור הנתונים הנתון, העמיסו יתר על המידה את השיטה הבאה:









פרמטרים:



    1. מָקוֹר : מקור יכול להיות IEnumerable (רשימה) שבה המילון נוצר ממקור זה.
    2. בורר מפתח : זוהי פונקציה המשמשת לקבל את המפתח מכל אלמנט.
    3. elementSelector: זוהי פונקציה המשמשת כדי לקבל את האלמנט.
    4. TSource : זהו פרמטר הסוג שמציין את סוג מקור הנתונים.
    5. TKey: זהו פרמטר הסוג המציין את סוג המפתח.
    6. TElement : זהו פרמטר הסוג שמציין את סוג האלמנט.

2. אם ברצונך ליצור מילון לפי פונקציית בורר המפתחות שצוינה ממקור הנתונים הנתון, העמיס יתר על המידה את השיטה הבאה:





פרמטרים:



    1. מָקוֹר : מקור יכול להיות IEnumerable (רשימה) שבה המילון נוצר ממקור זה.
    2. בורר מפתח : זוהי פונקציה המשמשת לקבל את המפתח מכל אלמנט.
    3. מקור: זה מתייחס לסוג מקור הנתונים.
    4. TKey : הוא מציין את סוג המפתח.

דוגמה 1: בורר מפתח ופונקציית בורר אלמנטים

צור רשימה עם סוג 'חשבון' שמכיל ארבע תכונות (Acc_ID, Acc_Name, Industry, Revenue) עם חמש רשומות.

1. צור מילון מהרשימה הקודמת עם המפתח בתור Acc_ID וערך בתור Acc_Name.
2. צור מילון מהרשימה הקודמת עם המפתח בתור Acc_Name ו- Value as Revenue.

באמצעות מערכת ;
באמצעות System.Linq ;
באמצעות מערכת.אוספים.גנרי ;

מעמד פרטי חשבון
{
פּוּמְבֵּי סטָטִי בָּטֵל רָאשִׁי ( )
{
// צור רשימה מסוג - חשבון.
רשימת פרטים = חָדָשׁ רשימה ( ) ;
// הוסף 5 רשומות לרשימה.
פרטים . לְהוֹסִיף ( חָדָשׁ חֶשְׁבּוֹן { Acc_ID = 1 , Acc_Name = 'לינוקס' , תעשייה = 'חינוך' ,הַכנָסָה = 2500 } ) ;
פרטים . לְהוֹסִיף ( חָדָשׁ חֶשְׁבּוֹן { Acc_ID = 2 , Acc_Name = 'פִּיתוֹן' , תעשייה = 'בוטקמפ' ,הַכנָסָה = 10000 } ) ;
פרטים . לְהוֹסִיף ( חָדָשׁ חֶשְׁבּוֹן { Acc_ID = 3 , Acc_Name = 'ג'אווה' , תעשייה = 'חינוך' ,הַכנָסָה = 500 } ) ;
פרטים . לְהוֹסִיף ( חָדָשׁ חֶשְׁבּוֹן { Acc_ID = 4 , Acc_Name = '.נֶטוֹ' , תעשייה = 'הַדְרָכָה' ,הַכנָסָה = 2080 } ) ;
פרטים . לְהוֹסִיף ( חָדָשׁ חֶשְׁבּוֹן { Acc_ID = 5 , Acc_Name = 'נבואה' , תעשייה = 'עבודה' ,הַכנָסָה = 2090 } ) ;

// צור מילון מהרשימה שלמעלה עם מפתח בתור Acc_ID וערך בתור Acc_Name
לְנַחֵם . WriteLine ( ' ----מפתח כ-Acc_ID וערך כ-Acc_Name----' ) ;
מילון חשבונות_dict1 = פרטים . ToDictionary ( י => י . Acc_ID , י => י . Acc_Name ) ;

לכל אחד ( KeyValuePair i ב חשבונות_dict1 )
{
לְנַחֵם . WriteLine ( 'מזהה חשבון :' + אני . מַפְתֵחַ + ' שם החשבון :' + אני . ערך ) ;
}

// צור מילון מהרשימה שלמעלה עם מפתח בתור Acc_Name וערך כהכנסה
לְנַחֵם . WriteLine ( ' ----מפתח כ-Acc_Name וערך כהכנסה----' ) ;
מילון חשבונות_dict2 = פרטים . ToDictionary ( ל => ל . Acc_Name , ל => ל . הַכנָסָה ) ;

לכל אחד ( KeyValuePair k ב חשבונות_dict2 )
{
לְנַחֵם . WriteLine ( 'שם החשבון :' + ק . מַפְתֵחַ + 'חשבון-הכנסה:' + ק . ערך ) ;
}

}
}

// צור מחלקה בשם - חשבון עם ארבע תכונות
פּוּמְבֵּי מעמד חֶשְׁבּוֹן
{
פּוּמְבֵּי int Acc_ID { לקבל ; מַעֲרֶכֶת ; }
פּוּמְבֵּי חוּט Acc_Name { לקבל ; מַעֲרֶכֶת ; }
פּוּמְבֵּי חוּט תַעֲשִׂיָה { לקבל ; מַעֲרֶכֶת ; }
פּוּמְבֵּי int הַכנָסָה { לקבל ; מַעֲרֶכֶת ; }
}

תְפוּקָה:

הֶסבֵּר:

1. צור מחלקה בשם 'חשבון' עם ארבע תכונות.

2. במחלקה הראשית, צור רשימה מסוג 'חשבון' והכנס לתוכה חמש רשומות.

3. צור מילון מהרשימה הקודמת עם המפתח בתור Acc_ID וערך בתור Acc_Name. כאן, אנו מציינים את ה-TKey כ-int ואת ה-TElement כמחרוזת. בתוך שיטת ToDictionary() אנו מעבירים את Acc_ID ב-keySelector ואת Acc_Name ב-elementSelector. לבסוף, אנו משתמשים בלולאה 'foreach' כדי לחזור על המילון ולהחזיר את המפתחות והערכים באמצעות מאפייני המפתח והערך.

4. צור מילון מהרשימה הקודמת עם המפתח בתור Acc_Name והערך בתור Revenue. כאן, אנו מציינים את ה-TKey כמחרוזת ואת ה-TElement כ-int. בתוך שיטת ToDictionary() אנו מעבירים את Acc_Name ב-keySelector ואת ה-Revenue ב-elementSelector. לבסוף, אנו משתמשים בלולאה 'foreach' כדי לחזור על המילון ולהחזיר את המפתחות והערכים באמצעות מאפייני המפתח והערך.

דוגמה 2: בורר מפתח שצוין

השתמש בקוד הקודם וצור מילון מהרשימה הקודמת עם המפתח בתור Acc_ID.

באמצעות מערכת ;
באמצעות System.Linq ;
באמצעות מערכת.אוספים.גנרי ;

מעמד פרטי חשבון
{
פּוּמְבֵּי סטָטִי בָּטֵל רָאשִׁי ( )
{
// צור רשימה מסוג - חשבון.
רשימת פרטים = חָדָשׁ רשימה ( ) ;
// הוסף 5 רשומות לרשימה.
פרטים . לְהוֹסִיף ( חָדָשׁ חֶשְׁבּוֹן { Acc_ID = 1 , Acc_Name = 'לינוקס' , תעשייה = 'חינוך' ,הַכנָסָה = 2500 } ) ;
פרטים . לְהוֹסִיף ( חָדָשׁ חֶשְׁבּוֹן { Acc_ID = 2 , Acc_Name = 'פִּיתוֹן' , תעשייה = 'בוטקמפ' ,הַכנָסָה = 10000 } ) ;
פרטים . לְהוֹסִיף ( חָדָשׁ חֶשְׁבּוֹן { Acc_ID = 3 , Acc_Name = 'ג'אווה' , תעשייה = 'חינוך' ,הַכנָסָה = 500 } ) ;
פרטים . לְהוֹסִיף ( חָדָשׁ חֶשְׁבּוֹן { Acc_ID = 4 , Acc_Name = '.נֶטוֹ' , תעשייה = 'הַדְרָכָה' ,הַכנָסָה = 2080 } ) ;
פרטים . לְהוֹסִיף ( חָדָשׁ חֶשְׁבּוֹן { Acc_ID = 5 , Acc_Name = 'נבואה' , תעשייה = 'עבודה' ,הַכנָסָה = 2090 } ) ;

// צור מילון מהרשימה שלמעלה עם מפתח בתור Acc_ID.
מילון חשבונות_dict = פרטים . ToDictionary ( י => י . Acc_ID ) ;
לכל אחד ( KeyValuePair i ב חשבונות_dict )
{
לְנַחֵם . WriteLine ( 'מַפְתֵחַ:' + אני . מַפְתֵחַ + '-->  שם חשבון :' + אני . ערך . Acc_Name
+ 'חשבון-תעשיית:' + אני . ערך . תַעֲשִׂיָה
+ 'חשבון-הכנסה:' + אני . ערך . הַכנָסָה ) ;
}

}
}

// צור מחלקה בשם - חשבון עם ארבע תכונות
פּוּמְבֵּי מעמד חֶשְׁבּוֹן
{
פּוּמְבֵּי int Acc_ID { לקבל ; מַעֲרֶכֶת ; }
פּוּמְבֵּי חוּט Acc_Name { לקבל ; מַעֲרֶכֶת ; }
פּוּמְבֵּי חוּט תַעֲשִׂיָה { לקבל ; מַעֲרֶכֶת ; }
פּוּמְבֵּי int הַכנָסָה { לקבל ; מַעֲרֶכֶת ; }
}

תְפוּקָה:

הֶסבֵּר:

כאן, אנו יוצרים מילון עם המפתח בתור Acc_ID. זה משמש כמפתח לכל רשומה במילון שיצרנו מהרשימה. לאחר מכן, אנו משתמשים בלולאת 'foreach' כדי לקבל את המפתחות והערכים (עם תכונות) באמצעות מאפייני המפתח והערך.

דוגמה 3: שכפול מפתחות - ArgumentException

צור רשימה עם שתי רשומות ונסה להמיר אותה למילון עם המפתח Acc_ID.

באמצעות מערכת ;
באמצעות System.Linq ;
באמצעות מערכת.אוספים.גנרי ;

מעמד פרטי חשבון
{
פּוּמְבֵּי סטָטִי בָּטֵל רָאשִׁי ( )
{
// צור רשימה מסוג - חשבון.
רשימת פרטים = חָדָשׁ רשימה ( ) ;
// הוסף 2 רשומות לרשימה.
פרטים . לְהוֹסִיף ( חָדָשׁ חֶשְׁבּוֹן { Acc_ID = 1 , Acc_Name = 'לינוקס' , תעשייה = 'חינוך' ,הַכנָסָה = 2500 } ) ;
פרטים . לְהוֹסִיף ( חָדָשׁ חֶשְׁבּוֹן { Acc_ID = 1 , Acc_Name = 'פִּיתוֹן' , תעשייה = 'בוטקמפ' ,הַכנָסָה = 10000 } ) ;

// נסה ליצור מילון מהרשימה שלמעלה עם מפתח בתור Acc_ID.
מילון חשבונות_dict = פרטים . ToDictionary ( י => י . Acc_ID ) ;

}
}

// צור מחלקה בשם - חשבון עם ארבע תכונות
פּוּמְבֵּי מעמד חֶשְׁבּוֹן
{
פּוּמְבֵּי int Acc_ID { לקבל ; מַעֲרֶכֶת ; }
פּוּמְבֵּי חוּט Acc_Name { לקבל ; מַעֲרֶכֶת ; }
פּוּמְבֵּי חוּט תַעֲשִׂיָה { לקבל ; מַעֲרֶכֶת ; }
פּוּמְבֵּי int הַכנָסָה { לקבל ; מַעֲרֶכֶת ; }
}

יוצא מן הכלל:

חריג לא מטופל שהוא System.ArgumentException מועלה מכיוון שהמפתח הוא כפול (1) בשני ה-Acc_ID's.

דוגמה 4: מקור ריק - ArgumentNullException

צור רשימה עם סוג 'חשבון' והקצה לה null. נסה ליצור מילון מהרשימה הקודמת עם המפתח בתור Acc_ID.

באמצעות מערכת ;
באמצעות System.Linq ;
באמצעות מערכת.אוספים.גנרי ;

מעמד פרטי חשבון
{
פּוּמְבֵּי סטָטִי בָּטֵל רָאשִׁי ( )
{
// צור רשימה של סוג - חשבון והקצה לו null.
רשימת פרטים = ריק ;

// נסה ליצור מילון מהרשימה שלמעלה עם מפתח בתור Acc_ID.
מילון חשבונות_dict = פרטים . ToDictionary ( י => י . Acc_ID ) ;

}
}

// צור מחלקה בשם - חשבון עם ארבע תכונות
פּוּמְבֵּי מעמד חֶשְׁבּוֹן
{
פּוּמְבֵּי int Acc_ID { לקבל ; מַעֲרֶכֶת ; }
פּוּמְבֵּי חוּט Acc_Name { לקבל ; מַעֲרֶכֶת ; }
פּוּמְבֵּי חוּט תַעֲשִׂיָה { לקבל ; מַעֲרֶכֶת ; }
פּוּמְבֵּי int הַכנָסָה { לקבל ; מַעֲרֶכֶת ; }
}

יוצא מן הכלל:

חריג לא מטופל שהוא System.ArgumentNullException מועלה מכיוון שהרשימה היא null.

סיכום

למדנו כיצד ליצור מילון מתוך ה-IEnumerable (הנה, זה רשימה) באמצעות שיטת ToDictionary() ב-C# LINQ. ניתן להעמיס על שיטה זו בשתי דרכים. דנו בשתי השיטות עם דוגמאות. כמו כן, למדנו את שני המקרים החריגים המועלים בשיטה זו כאשר מקור הנתונים/ keySelector/ elementSelector הוא ריק והמפתחות משוכפלים.