แปลง C# LINQ เป็นพจนานุกรม

Paelng C Linq Pen Phcnanukrm



ใน C# LINQ การสร้างพจนานุกรมจาก System.Collections.Generic.IEnumerable เป็นไปได้โดยใช้เมธอด ToDictionary() วิธีนี้สร้างพจนานุกรมด้วย จาก ที่กำหนด เดอะ System.ArgumentNullException จะถูกส่งออกมาหากแหล่งข้อมูล, keySelector หรือ elementSelector เป็นค่าว่าง นอกจากนี้ หาก keySelector สร้างคีย์ที่ซ้ำกันสำหรับสององค์ประกอบ System.ArgumentException ถูกโยนทิ้ง ในคู่มือนี้ เราจะพูดถึงวิธีสร้างพจนานุกรมจากแหล่งข้อมูลรายการโดยการโอเวอร์โหลดสองวิธี

ไวยากรณ์:

1. หากคุณต้องการสร้างพจนานุกรมตามฟังก์ชั่นตัวเลือกคีย์และตัวเลือกองค์ประกอบที่ระบุจากแหล่งข้อมูลที่กำหนด ให้โอเวอร์โหลดวิธีการต่อไปนี้:









พารามิเตอร์:



    1. แหล่งที่มา : แหล่งที่มาสามารถเป็น IEnumerable (รายการ) ซึ่งพจนานุกรมถูกสร้างขึ้นจากแหล่งที่มานี้
    2. ตัวเลือกคีย์ : นี่คือฟังก์ชันที่ใช้เพื่อรับคีย์จากแต่ละองค์ประกอบ
    3. ตัวเลือกองค์ประกอบ: นี่คือฟังก์ชันที่ใช้ในการรับองค์ประกอบ
    4. ทีซอร์ส : นี่คือพารามิเตอร์ประเภทที่ระบุประเภทของแหล่งข้อมูล
    5. ทีคีย์: นี่คือพารามิเตอร์ประเภทที่ระบุประเภทของคีย์
    6. ธาตุ : นี่คือพารามิเตอร์ประเภทที่ระบุประเภทขององค์ประกอบ

2. หากคุณต้องการสร้างพจนานุกรมตามฟังก์ชันตัวเลือกคีย์ที่ระบุจากแหล่งข้อมูลที่กำหนด ให้โอเวอร์โหลดวิธีการต่อไปนี้:





พารามิเตอร์:



    1. แหล่งที่มา : แหล่งที่มาสามารถเป็น IEnumerable (รายการ) ซึ่งพจนานุกรมถูกสร้างขึ้นจากแหล่งที่มานี้
    2. ตัวเลือกคีย์ : นี่คือฟังก์ชันที่ใช้เพื่อรับคีย์จากแต่ละองค์ประกอบ
    3. ที่มา: นี่หมายถึงประเภทของแหล่งข้อมูล
    4. ทีคีย์ : เป็นการระบุประเภทของคีย์

ตัวอย่างที่ 1: ฟังก์ชันตัวเลือกคีย์และตัวเลือกองค์ประกอบที่ระบุ

สร้างรายการด้วยประเภท 'บัญชี' ที่มีแอตทริบิวต์สี่รายการ (Acc_ID, Acc_Name, Industry, Revenue) พร้อมบันทึกห้ารายการ

1. สร้างพจนานุกรมจากรายการก่อนหน้าโดยมีคีย์เป็น Acc_ID และค่าเป็น Acc_Name
2. สร้างพจนานุกรมจากรายการก่อนหน้าโดยมีคีย์เป็น Acc_Name และค่าเป็นรายได้

โดยใช้ ระบบ ;
โดยใช้ System.Linq ;
โดยใช้ System.Collections.Generic ;

ระดับ ข้อมูลเกี่ยวกับบัญชี
{
สาธารณะ คงที่ เป็นโมฆะ หลัก ( )
{
// สร้างรายการประเภท - บัญชี
รายละเอียดรายการ = ใหม่ รายการ ( ) ;
// เพิ่ม 5 ระเบียนลงในรายการ
รายละเอียด . เพิ่ม ( ใหม่ บัญชี { Acc_ID = 1 , ชื่อบัญชี = 'ลีนุกซ์' , อุตสาหกรรม = 'การศึกษา' ,รายได้ = 2500 } ) ;
รายละเอียด . เพิ่ม ( ใหม่ บัญชี { Acc_ID = 2 , ชื่อบัญชี = 'งูหลาม' , อุตสาหกรรม = 'ค่ายฝึก' ,รายได้ = 10,000 } ) ;
รายละเอียด . เพิ่ม ( ใหม่ บัญชี { Acc_ID = 3 , ชื่อบัญชี = 'ชวา' , อุตสาหกรรม = 'การศึกษา' ,รายได้ = 500 } ) ;
รายละเอียด . เพิ่ม ( ใหม่ บัญชี { Acc_ID = 4 , ชื่อบัญชี = '.สุทธิ' , อุตสาหกรรม = 'การฝึกอบรม' ,รายได้ = 2080 } ) ;
รายละเอียด . เพิ่ม ( ใหม่ บัญชี { Acc_ID = 5 , ชื่อบัญชี = 'ออราเคิล' , อุตสาหกรรม = 'งาน' ,รายได้ = 2090 } ) ;

// สร้างพจนานุกรมจากรายการด้านบนโดยมีคีย์เป็น Acc_ID และค่าเป็น Acc_Name
คอนโซล . เขียนไลน์ ( ' ---- คีย์เป็น Acc_ID และค่าเป็น Acc_Name----' ) ;
บัญชีพจนานุกรม_dict1 = รายละเอียด . ไปที่พจนานุกรม ( เจ => เจ . Acc_ID , เจ => เจ . Acc_Name ) ;

แต่ละ ( KeyValuePair ผม ใน accounts_dict1 )
{
คอนโซล . เขียนไลน์ ( 'หมายเลขบัญชี :' + ฉัน . สำคัญ + ' ชื่อบัญชี :' + ฉัน . ค่า ) ;
}

// สร้างพจนานุกรมจากรายการด้านบนโดยมี Key เป็น Acc_Name และ Value เป็น Revenue
คอนโซล . เขียนไลน์ ( ' ---- คีย์เป็น Acc_Name และมูลค่าเป็นรายได้----' ) ;
บัญชีพจนานุกรม_dict2 = รายละเอียด . ไปที่พจนานุกรม ( => . Acc_Name , ล => . รายได้ ) ;

แต่ละ ( KeyValuePair k ใน accounts_dict2 )
{
คอนโซล . เขียนไลน์ ( 'ชื่อบัญชี :' + เค . สำคัญ + ' บัญชี-รายรับ :' + เค . ค่า ) ;
}

}
}

// สร้างคลาสชื่อ - บัญชีที่มีสี่แอตทริบิวต์
สาธารณะ ระดับ บัญชี
{
สาธารณะ นานาชาติ Acc_ID { รับ ; ชุด ; }
สาธารณะ สตริง Acc_Name { รับ ; ชุด ; }
สาธารณะ สตริง อุตสาหกรรม { รับ ; ชุด ; }
สาธารณะ นานาชาติ รายได้ { รับ ; ชุด ; }
}

เอาท์พุต:

คำอธิบาย:

1. สร้างคลาสชื่อ “บัญชี” ที่มีสี่แอตทริบิวต์

2. ในคลาสหลัก ให้สร้างรายการประเภท 'บัญชี' และใส่ข้อมูล 5 รายการลงไป

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 ;
โดยใช้ System.Collections.Generic ;

ระดับ ข้อมูลเกี่ยวกับบัญชี
{
สาธารณะ คงที่ เป็นโมฆะ หลัก ( )
{
// สร้างรายการประเภท - บัญชี
รายละเอียดรายการ = ใหม่ รายการ ( ) ;
// เพิ่ม 5 ระเบียนลงในรายการ
รายละเอียด . เพิ่ม ( ใหม่ บัญชี { Acc_ID = 1 , ชื่อบัญชี = 'ลีนุกซ์' , อุตสาหกรรม = 'การศึกษา' ,รายได้ = 2500 } ) ;
รายละเอียด . เพิ่ม ( ใหม่ บัญชี { Acc_ID = 2 , ชื่อบัญชี = 'งูหลาม' , อุตสาหกรรม = 'ค่ายฝึก' ,รายได้ = 10,000 } ) ;
รายละเอียด . เพิ่ม ( ใหม่ บัญชี { Acc_ID = 3 , ชื่อบัญชี = 'ชวา' , อุตสาหกรรม = 'การศึกษา' ,รายได้ = 500 } ) ;
รายละเอียด . เพิ่ม ( ใหม่ บัญชี { Acc_ID = 4 , ชื่อบัญชี = '.สุทธิ' , อุตสาหกรรม = 'การฝึกอบรม' ,รายได้ = 2080 } ) ;
รายละเอียด . เพิ่ม ( ใหม่ บัญชี { Acc_ID = 5 , ชื่อบัญชี = 'ออราเคิล' , อุตสาหกรรม = 'งาน' ,รายได้ = 2090 } ) ;

// สร้างพจนานุกรมจากรายการด้านบนด้วยคีย์เป็น Acc_ID
บัญชีพจนานุกรม_dict = รายละเอียด . ไปที่พจนานุกรม ( เจ => เจ . Acc_ID ) ;
แต่ละ ( KeyValuePair ผม ใน บัญชี_dict )
{
คอนโซล . เขียนไลน์ ( 'สำคัญ:' + ฉัน . สำคัญ + '-->  ชื่อบัญชี :' + ฉัน . ค่า . Acc_Name
+ ' บัญชี-อุตสาหกรรม :' + ฉัน . ค่า . อุตสาหกรรม
+ ' บัญชี-รายรับ :' + ฉัน . ค่า . รายได้ ) ;
}

}
}

// สร้างคลาสชื่อ - บัญชีที่มีสี่แอตทริบิวต์
สาธารณะ ระดับ บัญชี
{
สาธารณะ นานาชาติ Acc_ID { รับ ; ชุด ; }
สาธารณะ สตริง Acc_Name { รับ ; ชุด ; }
สาธารณะ สตริง อุตสาหกรรม { รับ ; ชุด ; }
สาธารณะ นานาชาติ รายได้ { รับ ; ชุด ; }
}

เอาท์พุต:

คำอธิบาย:

ที่นี่ เราสร้างพจนานุกรมที่มีคีย์เป็น Acc_ID สิ่งนี้ทำหน้าที่เป็นกุญแจสำหรับแต่ละระเบียนในพจนานุกรมที่เราสร้างขึ้นจากรายการ หลังจากนั้น เราใช้ลูป 'foreach' เพื่อรับคีย์และค่า (พร้อมแอตทริบิวต์) โดยใช้คุณสมบัติคีย์และค่า

ตัวอย่างที่ 3: คีย์ซ้ำ – ArgumentException

สร้างรายการที่มีสองระเบียนและลองแปลงเป็นพจนานุกรมโดยใช้ Acc_ID เป็นคีย์

โดยใช้ ระบบ ;
โดยใช้ System.Linq ;
โดยใช้ System.Collections.Generic ;

ระดับ ข้อมูลเกี่ยวกับบัญชี
{
สาธารณะ คงที่ เป็นโมฆะ หลัก ( )
{
// สร้างรายการประเภท - บัญชี
รายละเอียดรายการ = ใหม่ รายการ ( ) ;
// เพิ่ม 2 ระเบียนลงในรายการ
รายละเอียด . เพิ่ม ( ใหม่ บัญชี { Acc_ID = 1 , ชื่อบัญชี = 'ลีนุกซ์' , อุตสาหกรรม = 'การศึกษา' ,รายได้ = 2500 } ) ;
รายละเอียด . เพิ่ม ( ใหม่ บัญชี { Acc_ID = 1 , ชื่อบัญชี = 'งูหลาม' , อุตสาหกรรม = 'ค่ายฝึก' ,รายได้ = 10,000 } ) ;

// ลองสร้างพจนานุกรมจากรายการด้านบนด้วยคีย์เป็น Acc_ID
บัญชีพจนานุกรม_dict = รายละเอียด . ไปที่พจนานุกรม ( เจ => เจ . Acc_ID ) ;

}
}

// สร้างคลาสชื่อ - บัญชีที่มีสี่แอตทริบิวต์
สาธารณะ ระดับ บัญชี
{
สาธารณะ นานาชาติ Acc_ID { รับ ; ชุด ; }
สาธารณะ สตริง Acc_Name { รับ ; ชุด ; }
สาธารณะ สตริง อุตสาหกรรม { รับ ; ชุด ; }
สาธารณะ นานาชาติ รายได้ { รับ ; ชุด ; }
}

ข้อยกเว้น:

ข้อยกเว้นที่ไม่สามารถจัดการได้ซึ่งเป็น System.ArgumentException นั้นถูกยกขึ้นเนื่องจากคีย์นั้นซ้ำกัน (1) ในทั้ง Acc_ID

ตัวอย่างที่ 4: Null Source – ArgumentNullException

สร้างรายการด้วยประเภท 'บัญชี' และกำหนดค่าว่างให้กับรายการ ลองสร้างพจนานุกรมจากรายการก่อนหน้าด้วยคีย์เป็น Acc_ID

โดยใช้ ระบบ ;
โดยใช้ System.Linq ;
โดยใช้ System.Collections.Generic ;

ระดับ ข้อมูลเกี่ยวกับบัญชี
{
สาธารณะ คงที่ เป็นโมฆะ หลัก ( )
{
// สร้างรายการประเภท - บัญชีและกำหนดค่าว่างให้กับมัน
รายละเอียดรายการ = โมฆะ ;

// ลองสร้างพจนานุกรมจากรายการด้านบนด้วยคีย์เป็น Acc_ID
บัญชีพจนานุกรม_dict = รายละเอียด . ไปที่พจนานุกรม ( เจ => เจ . Acc_ID ) ;

}
}

// สร้างคลาสชื่อ - บัญชีที่มีสี่แอตทริบิวต์
สาธารณะ ระดับ บัญชี
{
สาธารณะ นานาชาติ Acc_ID { รับ ; ชุด ; }
สาธารณะ สตริง Acc_Name { รับ ; ชุด ; }
สาธารณะ สตริง อุตสาหกรรม { รับ ; ชุด ; }
สาธารณะ นานาชาติ รายได้ { รับ ; ชุด ; }
}

ข้อยกเว้น:

ข้อยกเว้นที่ไม่สามารถจัดการได้ซึ่งเป็น System.ArgumentNullException ถูกยกขึ้นเนื่องจากรายการเป็นโมฆะ

บทสรุป

เราได้เรียนรู้วิธีสร้างพจนานุกรมจาก IEnumerable (นี่คือรายการ) โดยใช้เมธอด ToDictionary() ใน C# LINQ วิธีนี้สามารถโอเวอร์โหลดได้สองวิธี เราได้กล่าวถึงทั้งสองวิธีพร้อมตัวอย่าง นอกจากนี้ เราได้เรียนรู้กรณียกเว้นสองกรณีที่เกิดขึ้นโดยวิธีนี้เมื่อแหล่งข้อมูล/ keySelector/ elementSelector เป็นค่าว่างและคีย์ซ้ำกัน