C# LINQ ஐ அகராதியாக மாற்றவும்

C Linq Ai Akaratiyaka Marravum



C# LINQ இல், ஒரு அகராதியை உருவாக்குகிறது System.Collections.Generic.IEnumerable ToDictionary() முறையைப் பயன்படுத்தி சாத்தியமாகும். இந்த முறை கொடுக்கப்பட்ட இலிருந்து கொண்ட அகராதியை உருவாக்குகிறது. தி System.ArgumentNullException தரவு மூல, விசைத் தேர்வி அல்லது உறுப்புத் தேர்வி பூஜ்யமாக இருந்தால், அது வீசப்படும். மேலும், கீசெலக்டர் இரண்டு உறுப்புகளுக்கு நகல் விசைகளை உருவாக்கினால், தி System.ArgumentException தூக்கி எறியப்படுகிறது. இந்த வழிகாட்டியில், இரண்டு முறைகளை ஓவர்லோட் செய்வதன் மூலம் பட்டியல் தரவு மூலத்திலிருந்து அகராதியை எவ்வாறு உருவாக்குவது என்பது பற்றி விவாதிப்போம்.

தொடரியல்:

1. கொடுக்கப்பட்ட தரவு மூலத்திலிருந்து குறிப்பிட்ட விசை தேர்வி மற்றும் உறுப்பு தேர்வி செயல்பாடுகளின்படி அகராதியை உருவாக்க விரும்பினால், பின்வரும் முறையை ஓவர்லோட் செய்யவும்:









அளவுருக்கள்:



    1. ஆதாரம் : இந்த மூலத்திலிருந்து அகராதி உருவாக்கப்பட்ட IEnumerable (பட்டியல்) மூலமாக இருக்கலாம்.
    2. விசைத் தேர்வாளர் : இது ஒவ்வொரு உறுப்புகளிலிருந்தும் விசையைப் பெறப் பயன்படும் ஒரு செயல்பாடு.
    3. உறுப்பு தேர்வி: இது உறுப்பைப் பெறப் பயன்படும் ஒரு செயல்பாடு.
    4. TSஆதாரம் : இது தரவு மூலத்தின் வகையைக் குறிப்பிடும் வகை அளவுருவாகும்.
    5. TKey: இது விசையின் வகையைக் குறிப்பிடும் வகை அளவுருவாகும்.
    6. டெலிமென்ட் : இது தனிமத்தின் வகையைக் குறிப்பிடும் வகை அளவுருவாகும்.

2. கொடுக்கப்பட்ட தரவு மூலத்திலிருந்து குறிப்பிட்ட விசைத் தேர்வி செயல்பாட்டின்படி அகராதியை உருவாக்க விரும்பினால், பின்வரும் முறையை ஓவர்லோட் செய்யவும்:





அளவுருக்கள்:



    1. ஆதாரம் : இந்த மூலத்திலிருந்து அகராதி உருவாக்கப்பட்ட IEnumerable (பட்டியல்) மூலமாக இருக்கலாம்.
    2. விசைத் தேர்வாளர் : இது ஒவ்வொரு உறுப்புகளிலிருந்தும் விசையைப் பெறப் பயன்படும் ஒரு செயல்பாடு.
    3. TSஆதாரம்: இது தரவு மூல வகையைக் குறிக்கிறது.
    4. TKey : இது விசையின் வகையைக் குறிப்பிடுகிறது.

எடுத்துக்காட்டு 1: குறிப்பிடப்பட்ட விசை தேர்வி மற்றும் உறுப்பு தேர்வி செயல்பாடு

ஐந்து பதிவுகளுடன் நான்கு பண்புக்கூறுகளை (Acc_ID, Acc_Name, Industry, Revenue) கொண்ட “கணக்கு” ​​வகையுடன் பட்டியலை உருவாக்கவும்.

1. Acc_ID மற்றும் மதிப்பு Acc_Name என விசையுடன் முந்தைய பட்டியலில் இருந்து அகராதியை உருவாக்கவும்.
2. Acc_Name மற்றும் மதிப்பு வருவாய் என விசையுடன் முந்தைய பட்டியலில் இருந்து அகராதியை உருவாக்கவும்.

பயன்படுத்தி அமைப்பு ;
பயன்படுத்தி System.Linq ;
பயன்படுத்தி அமைப்பு.தொகுப்புகள்.பொது ;

வர்க்கம் கணக்கு விபரம்
{
பொது நிலையான வெற்றிடமானது முக்கிய ( )
{
// வகை பட்டியலை உருவாக்கவும் - கணக்கு.
பட்டியல் விவரங்கள் = புதிய பட்டியல் ( ) ;
// பட்டியலில் 5 பதிவுகளைச் சேர்க்கவும்.
விவரங்கள் . கூட்டு ( புதிய கணக்கு { Acc_ID = 1 , Ac_Name = 'லினக்ஸ்' , தொழில் = 'கல்வி' ,வருவாய் = 2500 } ) ;
விவரங்கள் . கூட்டு ( புதிய கணக்கு { Acc_ID = 2 , Ac_Name = 'பைத்தான்' , தொழில் = 'துவக்க முகாம்' ,வருவாய் = 10000 } ) ;
விவரங்கள் . கூட்டு ( புதிய கணக்கு { Acc_ID = 3 , Ac_Name = 'ஜாவா' , தொழில் = 'கல்வி' ,வருவாய் = 500 } ) ;
விவரங்கள் . கூட்டு ( புதிய கணக்கு { Acc_ID = 4 , Ac_Name = '.NET' , தொழில் = 'பயிற்சி' ,வருவாய் = 2080 } ) ;
விவரங்கள் . கூட்டு ( புதிய கணக்கு { Acc_ID = 5 , Ac_Name = 'ஆரக்கிள்' , தொழில் = 'வேலை' ,வருவாய் = 2090 } ) ;

// மேலே உள்ள பட்டியலிலிருந்து ஒரு அகராதியை Acc_ID ஆகவும் மதிப்பு Acc_Name ஆகவும் உருவாக்கவும்
பணியகம் . ரைட்லைன் ( ' ----விசை Acc_ID ஆகவும் மதிப்பு Acc_Name ஆகவும்----' ) ;
அகராதி கணக்குகள்_டிக்ட்1 = விவரங்கள் . அகராதி ( ஜே => ஜே . Acc_ID , ஜே => ஜே . அக்_பெயர் ) ;

ஒவ்வொரு ( KeyValuePair i உள்ளே கணக்குகள்_ஆணை1 )
{
பணியகம் . ரைட்லைன் ( 'கணக்கு-ஐடி :' + நான் . முக்கிய + ' கணக்கின் பெயர் :' + நான் . மதிப்பு ) ;
}

// மேலே உள்ள பட்டியலில் இருந்து ஒரு அகராதியை உருவாக்கவும்
பணியகம் . ரைட்லைன் ( ' ----Acc_Name மற்றும் மதிப்பு வருவாயாக ----' ) ;
அகராதி கணக்குகள்_டிக்ட்2 = விவரங்கள் . அகராதி ( எல் => எல் . அக்_பெயர் , எல் => எல் . வருவாய் ) ;

ஒவ்வொரு ( KeyValuePair கே உள்ளே கணக்குகள்_ஆணை2 )
{
பணியகம் . ரைட்லைன் ( 'கணக்கின் பெயர் :' + கே . முக்கிய + 'கணக்கு-வருவாய் :' + கே . மதிப்பு ) ;
}

}
}

// என்ற வகுப்பை உருவாக்கவும் - நான்கு பண்புக்கூறுகளுடன் கணக்கு
பொது வர்க்கம் கணக்கு
{
பொது முழு எண்ணாக Acc_ID { பெறு ; அமைக்கப்பட்டது ; }
பொது லேசான கயிறு அக்_பெயர் { பெறு ; அமைக்கப்பட்டது ; }
பொது லேசான கயிறு தொழில் { பெறு ; அமைக்கப்பட்டது ; }
பொது முழு எண்ணாக வருவாய் { பெறு ; அமைக்கப்பட்டது ; }
}

வெளியீடு:

விளக்கம்:

1. நான்கு பண்புக்கூறுகளுடன் 'கணக்கு' என்ற வகுப்பை உருவாக்கவும்.

2. பிரதான வகுப்பில், 'கணக்கு' வகையின் பட்டியலை உருவாக்கி அதில் ஐந்து பதிவுகளைச் செருகவும்.

3. Acc_ID மற்றும் மதிப்பு Acc_Name என விசையுடன் முந்தைய பட்டியலில் இருந்து அகராதியை உருவாக்கவும். இங்கே, TKey ஐ int ஆகவும், TElement ஐ சரமாகவும் குறிப்பிடுகிறோம். ToDictionary() முறையின் உள்ளே, நாம் keySelector இல் Acc_ID ஐயும், ElementSelector இல் Acc_Name ஐயும் அனுப்புகிறோம். இறுதியாக, அகராதியை மீண்டும் செய்யவும், விசை மற்றும் மதிப்பு பண்புகளைப் பயன்படுத்தி விசைகள் மற்றும் மதிப்புகளை வழங்கவும் 'ஃபோர்ச்' லூப்பைப் பயன்படுத்துகிறோம்.

4. முந்தைய பட்டியலிலிருந்து ஒரு அகராதியை உருவாக்கவும், விசையை Acc_Name மற்றும் மதிப்பை வருவாய். இங்கே, TKey ஐ சரமாகவும், TElement ஐ int ஆகவும் குறிப்பிடுகிறோம். ToDictionary() முறையின் உள்ளே, கீசெலக்டரில் Acc_Name ஐயும், எலிமென்ட் செலக்டரில் வருமானத்தையும் அனுப்புகிறோம். இறுதியாக, அகராதியை மீண்டும் செய்யவும், விசை மற்றும் மதிப்பு பண்புகளைப் பயன்படுத்தி விசைகள் மற்றும் மதிப்புகளை வழங்கவும் 'ஃபோர்ச்' லூப்பைப் பயன்படுத்துகிறோம்.

எடுத்துக்காட்டு 2: குறிப்பிடப்பட்ட விசைத் தேர்வி

முந்தைய குறியீட்டைப் பயன்படுத்தி, Acc_ID என விசையுடன் முந்தைய பட்டியலில் இருந்து அகராதியை உருவாக்கவும்.

பயன்படுத்தி அமைப்பு ;
பயன்படுத்தி System.Linq ;
பயன்படுத்தி அமைப்பு.தொகுப்புகள்.பொது ;

வர்க்கம் கணக்கு விபரம்
{
பொது நிலையான வெற்றிடமானது முக்கிய ( )
{
// வகை பட்டியலை உருவாக்கவும் - கணக்கு.
பட்டியல் விவரங்கள் = புதிய பட்டியல் ( ) ;
// பட்டியலில் 5 பதிவுகளைச் சேர்க்கவும்.
விவரங்கள் . கூட்டு ( புதிய கணக்கு { Acc_ID = 1 , Ac_Name = 'லினக்ஸ்' , தொழில் = 'கல்வி' ,வருவாய் = 2500 } ) ;
விவரங்கள் . கூட்டு ( புதிய கணக்கு { Acc_ID = 2 , Ac_Name = 'பைத்தான்' , தொழில் = 'துவக்க முகாம்' ,வருவாய் = 10000 } ) ;
விவரங்கள் . கூட்டு ( புதிய கணக்கு { Acc_ID = 3 , Ac_Name = 'ஜாவா' , தொழில் = 'கல்வி' ,வருவாய் = 500 } ) ;
விவரங்கள் . கூட்டு ( புதிய கணக்கு { Acc_ID = 4 , Ac_Name = '.NET' , தொழில் = 'பயிற்சி' ,வருவாய் = 2080 } ) ;
விவரங்கள் . கூட்டு ( புதிய கணக்கு { Acc_ID = 5 , Ac_Name = 'ஆரக்கிள்' , தொழில் = 'வேலை' ,வருவாய் = 2090 } ) ;

// மேலே உள்ள பட்டியலில் இருந்து ஒரு அகராதியை Acc_ID ஆக விசையுடன் உருவாக்கவும்.
அகராதி கணக்குகள்_டிக்ட் = விவரங்கள் . அகராதி ( ஜே => ஜே . Acc_ID ) ;
ஒவ்வொரு ( KeyValuePair i உள்ளே கணக்குகள்_ஆணை )
{
பணியகம் . ரைட்லைன் ( 'விசை:' + நான் . முக்கிய + '-->  கணக்கு-பெயர் :' + நான் . மதிப்பு . அக்_பெயர்
+ 'கணக்கு-தொழில் :' + நான் . மதிப்பு . தொழில்
+ 'கணக்கு-வருவாய் :' + நான் . மதிப்பு . வருவாய் ) ;
}

}
}

// என்ற வகுப்பை உருவாக்கவும் - நான்கு பண்புக்கூறுகளுடன் கணக்கு
பொது வர்க்கம் கணக்கு
{
பொது முழு எண்ணாக Acc_ID { பெறு ; அமைக்கப்பட்டது ; }
பொது லேசான கயிறு அக்_பெயர் { பெறு ; அமைக்கப்பட்டது ; }
பொது லேசான கயிறு தொழில் { பெறு ; அமைக்கப்பட்டது ; }
பொது முழு எண்ணாக வருவாய் { பெறு ; அமைக்கப்பட்டது ; }
}

வெளியீடு:

விளக்கம்:

இங்கே, Acc_ID என விசையுடன் அகராதியை உருவாக்குகிறோம். பட்டியலிலிருந்து நாம் உருவாக்கிய அகராதியிலுள்ள ஒவ்வொரு பதிவிற்கும் இது திறவுகோலாக செயல்படுகிறது. அதன் பிறகு, விசை மற்றும் மதிப்பு பண்புகளைப் பயன்படுத்தி விசைகள் மற்றும் மதிப்புகள் (பண்புகளுடன்) பெற 'ஃபோர்ச்' லூப்பைப் பயன்படுத்துகிறோம்.

எடுத்துக்காட்டு 3: நகல் விசைகள் - ஆர்குமென்ட்எக்செப்சன்

இரண்டு பதிவுகள் கொண்ட பட்டியலை உருவாக்கி, அதை Acc_ID விசையாகக் கொண்டு அகராதியாக மாற்ற முயற்சிக்கவும்.

பயன்படுத்தி அமைப்பு ;
பயன்படுத்தி System.Linq ;
பயன்படுத்தி அமைப்பு.தொகுப்புகள்.பொது ;

வர்க்கம் கணக்கு விபரம்
{
பொது நிலையான வெற்றிடமானது முக்கிய ( )
{
// வகை பட்டியலை உருவாக்கவும் - கணக்கு.
பட்டியல் விவரங்கள் = புதிய பட்டியல் ( ) ;
// பட்டியலில் 2 பதிவுகளைச் சேர்க்கவும்.
விவரங்கள் . கூட்டு ( புதிய கணக்கு { Acc_ID = 1 , Ac_Name = 'லினக்ஸ்' , தொழில் = 'கல்வி' ,வருவாய் = 2500 } ) ;
விவரங்கள் . கூட்டு ( புதிய கணக்கு { Acc_ID = 1 , Ac_Name = 'பைத்தான்' , தொழில் = 'துவக்க முகாம்' ,வருவாய் = 10000 } ) ;

// மேலே உள்ள பட்டியலிலிருந்து ஒரு அகராதியை Acc_ID ஆக விசையுடன் உருவாக்க முயற்சிக்கவும்.
அகராதி கணக்குகள்_டிக்ட் = விவரங்கள் . அகராதி ( ஜே => ஜே . Acc_ID ) ;

}
}

// என்ற வகுப்பை உருவாக்கவும் - நான்கு பண்புக்கூறுகளுடன் கணக்கு
பொது வர்க்கம் கணக்கு
{
பொது முழு எண்ணாக Acc_ID { பெறு ; அமைக்கப்பட்டது ; }
பொது லேசான கயிறு அக்_பெயர் { பெறு ; அமைக்கப்பட்டது ; }
பொது லேசான கயிறு தொழில் { பெறு ; அமைக்கப்பட்டது ; }
பொது முழு எண்ணாக வருவாய் { பெறு ; அமைக்கப்பட்டது ; }
}

விதிவிலக்கு:

சிஸ்டம் என்பது கையாளப்படாத விதிவிலக்கு. Acc_ID இரண்டிலும் விசை நகல் (1) என்பதால் ஆர்குமென்ட் விதிவிலக்கு உயர்த்தப்பட்டது.

எடுத்துக்காட்டு 4: பூஜ்ய ஆதாரம் - ArgumentNullException

'கணக்கு' வகையுடன் ஒரு பட்டியலை உருவாக்கி, அதற்கு பூஜ்யத்தை ஒதுக்கவும். Acc_ID என விசையுடன் முந்தைய பட்டியலில் இருந்து அகராதியை உருவாக்க முயற்சிக்கவும்.

பயன்படுத்தி அமைப்பு ;
பயன்படுத்தி System.Linq ;
பயன்படுத்தி அமைப்பு.தொகுப்புகள்.பொது ;

வர்க்கம் கணக்கு விபரம்
{
பொது நிலையான வெற்றிடமானது முக்கிய ( )
{
// வகை பட்டியலை உருவாக்கவும் - கணக்கு மற்றும் அதற்கு பூஜ்யத்தை ஒதுக்கவும்.
பட்டியல் விவரங்கள் = ஏதுமில்லை ;

// மேலே உள்ள பட்டியலிலிருந்து ஒரு அகராதியை Acc_ID ஆக விசையுடன் உருவாக்க முயற்சிக்கவும்.
அகராதி கணக்குகள்_டிக்ட் = விவரங்கள் . அகராதி ( ஜே => ஜே . Acc_ID ) ;

}
}

// என்ற வகுப்பை உருவாக்கவும் - நான்கு பண்புக்கூறுகளுடன் கணக்கு
பொது வர்க்கம் கணக்கு
{
பொது முழு எண்ணாக Acc_ID { பெறு ; அமைக்கப்பட்டது ; }
பொது லேசான கயிறு அக்_பெயர் { பெறு ; அமைக்கப்பட்டது ; }
பொது லேசான கயிறு தொழில் { பெறு ; அமைக்கப்பட்டது ; }
பொது முழு எண்ணாக வருவாய் { பெறு ; அமைக்கப்பட்டது ; }
}

விதிவிலக்கு:

System.ArgumentNullException என்ற கையாளப்படாத விதிவிலக்கு பட்டியல் பூஜ்யமாக இருப்பதால் உயர்த்தப்பட்டது.

முடிவுரை

C# LINQ இல் உள்ள ToDictionary() முறையைப் பயன்படுத்தி IEnumerable (இங்கே, அது பட்டியல்) ஒரு அகராதியை எவ்வாறு உருவாக்குவது என்பதை நாங்கள் கற்றுக்கொண்டோம். இந்த முறையை இரண்டு வழிகளில் ஓவர்லோட் செய்யலாம். இரண்டு முறைகளையும் எடுத்துக்காட்டுகளுடன் விவாதித்தோம். மேலும், டேட்டா சோர்ஸ்/கீசெலக்டர்/எலிமென்ட் செலக்டர் பூஜ்யமாகவும், விசைகள் நகல்களாகவும் இருக்கும்போது, ​​இந்த முறையால் எழுப்பப்படும் இரண்டு விதிவிலக்கு நிகழ்வுகளை நாங்கள் கற்றுக்கொண்டோம்.