Tukar C# LINQ kepada Kamus

Tukar C Linq Kepada Kamus



Dalam C# LINQ, mencipta kamus dari System.Collections.Generic.IEnumerable adalah mungkin menggunakan kaedah ToDictionary(). Kaedah ini mencipta kamus dengan daripada yang diberikan. The System.ArgumentNullException dibuang jika sumber data, keySelector, atau elementSelector adalah batal. Juga, jika keySelector menghasilkan kunci pendua untuk dua elemen, the System.ArgumentException dilemparkan. Dalam panduan ini, kami akan membincangkan cara mencipta kamus daripada sumber data senarai dengan melebihkan dua kaedah.

Sintaks:

1. Jika anda ingin mencipta kamus mengikut pemilih kunci yang ditentukan dan fungsi pemilih elemen daripada sumber data yang diberikan, lebihkan kaedah berikut:









Parameter:



    1. sumber : Sumber boleh menjadi IEnumerable (senarai) di mana kamus dicipta daripada sumber ini.
    2. keySelector : Ini adalah fungsi yang digunakan untuk mendapatkan kunci daripada setiap elemen.
    3. elementSelector: Ini adalah fungsi yang digunakan untuk mendapatkan elemen.
    4. TSsource : Ini ialah parameter jenis yang menentukan jenis sumber data.
    5. Kunci T: Ini ialah parameter jenis yang menentukan jenis kunci.
    6. TElement : Ini ialah parameter jenis yang menentukan jenis elemen.

2. Jika anda ingin mencipta kamus mengikut fungsi pemilih kunci yang ditentukan daripada sumber data yang diberikan, tambahkan kaedah berikut:





Parameter:



    1. sumber : Sumber boleh menjadi IEnumerable (senarai) di mana kamus dicipta daripada sumber ini.
    2. keySelector : Ini adalah fungsi yang digunakan untuk mendapatkan kunci daripada setiap elemen.
    3. TSsource: Ini merujuk kepada jenis sumber data.
    4. TKey : Ia menentukan jenis kunci.

Contoh 1: Fungsi Pemilih Kekunci dan Pemilih Elemen yang Ditentukan

Buat senarai dengan jenis 'Akaun' yang mengandungi empat atribut (Acc_ID, Acc_Name, Industry, Revenue) dengan lima rekod.

1. Buat kamus daripada senarai sebelumnya dengan kunci sebagai Acc_ID dan Nilai sebagai Acc_Name.
2. Cipta kamus daripada senarai sebelumnya dengan kunci sebagai Acc_Name dan Nilai sebagai Hasil.

menggunakan Sistem ;
menggunakan Sistem.Linq ;
menggunakan Sistem.Koleksi.Generik ;

kelas Maklumat Akaun
{
awam statik batal Utama ( )
{
// Cipta Senarai jenis - Akaun.
Senarai butiran = baru Senaraikan ( ) ;
// Tambah 5 rekod ke Senarai.
butiran . Tambah ( baru Akaun { Acc_ID = 1 , Acc_Name = 'Linux' , Industri = 'Pendidikan' , Hasil = 2500 } ) ;
butiran . Tambah ( baru Akaun { Acc_ID = 2 , Acc_Name = 'Python' , Industri = 'Bootcamp' , Hasil = 10000 } ) ;
butiran . Tambah ( baru Akaun { Acc_ID = 3 , Acc_Name = 'Jawa' , Industri = 'Pendidikan' , Hasil = 500 } ) ;
butiran . Tambah ( baru Akaun { Acc_ID = 4 , Acc_Name = '.NET' , Industri = 'Latihan' , Hasil = 2080 } ) ;
butiran . Tambah ( baru Akaun { Acc_ID = 5 , Acc_Name = 'Oracle' , Industri = 'Pekerjaan' , Hasil = 2090 } ) ;

// Cipta Kamus daripada Senarai di atas dengan Kunci sebagai Acc_ID dan Nilai sebagai Acc_Name
Konsol . WriteLine ( ' ----Kunci sebagai Acc_ID dan Nilai sebagai Acc_Name----' ) ;
Kamus akaun_dict1 = butiran . KepadaKamus ( j => j . Acc_ID , j => j . Nama_Acc ) ;

untuk setiap ( KeyValuePair i dalam akaun_dict1 )
{
Konsol . WriteLine ( 'ID Akaun :' + i . kunci + ' Nama akaun :' + i . Nilai ) ;
}

// Cipta Kamus daripada Senarai di atas dengan Kunci sebagai Acc_Name dan Nilai sebagai Hasil
Konsol . WriteLine ( ' ----Kunci sebagai Acc_Name dan Nilai sebagai Hasil----' ) ;
Kamus akaun_dict2 = butiran . KepadaKamus ( l => l . Nama_Acc , l => l . Hasil ) ;

untuk setiap ( KeyValuePair k dalam akaun_dict2 )
{
Konsol . WriteLine ( 'Nama akaun :' + k . kunci + 'Akaun-Hasil :' + k . Nilai ) ;
}

}
}

// Cipta kelas bernama - Akaun dengan empat atribut
awam kelas Akaun
{
awam int Acc_ID { dapatkan ; ditetapkan ; }
awam tali Nama_Acc { dapatkan ; ditetapkan ; }
awam tali industri { dapatkan ; ditetapkan ; }
awam int Hasil { dapatkan ; ditetapkan ; }
}

Pengeluaran:

Penjelasan:

1. Buat kelas bernama 'Akaun' dengan empat atribut.

2. Dalam kelas utama, buat senarai jenis 'Akaun' dan masukkan lima rekod ke dalamnya.

3. Cipta kamus daripada senarai sebelumnya dengan kunci sebagai Acc_ID dan Nilai sebagai Acc_Name. Di sini, kami menentukan TKey sebagai int dan TElement sebagai rentetan. Di dalam kaedah ToDictionary(), kami lulus Acc_ID dalam keySelector dan Acc_Name dalam elementSelector. Akhir sekali, kami menggunakan gelung 'foreach' untuk mengulang kamus dan mengembalikan kunci dan nilai menggunakan sifat kunci dan nilai.

4. Cipta kamus daripada senarai sebelumnya dengan kunci sebagai Acc_Name dan nilai sebagai Hasil. Di sini, kami menentukan TKey sebagai rentetan dan TElement sebagai int. Di dalam kaedah ToDictionary(), kami lulus Acc_Name dalam keySelector dan Revenue dalam elementSelector. Akhir sekali, kami menggunakan gelung 'foreach' untuk mengulang kamus dan mengembalikan kunci dan nilai menggunakan sifat kunci dan nilai.

Contoh 2: Pemilih Kunci Ditentukan

Gunakan kod sebelumnya dan buat kamus daripada senarai sebelumnya dengan kunci sebagai Acc_ID.

menggunakan Sistem ;
menggunakan Sistem.Linq ;
menggunakan Sistem.Koleksi.Generik ;

kelas Maklumat Akaun
{
awam statik batal Utama ( )
{
// Cipta Senarai jenis - Akaun.
Senarai butiran = baru Senaraikan ( ) ;
// Tambah 5 rekod ke Senarai.
butiran . Tambah ( baru Akaun { Acc_ID = 1 , Acc_Name = 'Linux' , Industri = 'Pendidikan' , Hasil = 2500 } ) ;
butiran . Tambah ( baru Akaun { Acc_ID = 2 , Acc_Name = 'Python' , Industri = 'Bootcamp' , Hasil = 10000 } ) ;
butiran . Tambah ( baru Akaun { Acc_ID = 3 , Acc_Name = 'Jawa' , Industri = 'Pendidikan' , Hasil = 500 } ) ;
butiran . Tambah ( baru Akaun { Acc_ID = 4 , Acc_Name = '.NET' , Industri = 'Latihan' , Hasil = 2080 } ) ;
butiran . Tambah ( baru Akaun { Acc_ID = 5 , Acc_Name = 'Oracle' , Industri = 'Pekerjaan' , Hasil = 2090 } ) ;

// Cipta Kamus daripada Senarai di atas dengan Kunci sebagai Acc_ID.
Kamus akaun_dict = butiran . KepadaKamus ( j => j . Acc_ID ) ;
untuk setiap ( KeyValuePair i dalam akaun_dikt )
{
Konsol . WriteLine ( 'Kunci:' + i . kunci + '-->  Nama Akaun :' + i . Nilai . Nama_Acc
+ 'Industri Akaun :' + i . Nilai . industri
+ 'Akaun-Hasil :' + i . Nilai . Hasil ) ;
}

}
}

// Cipta kelas bernama - Akaun dengan empat atribut
awam kelas Akaun
{
awam int Acc_ID { dapatkan ; ditetapkan ; }
awam tali Nama_Acc { dapatkan ; ditetapkan ; }
awam tali industri { dapatkan ; ditetapkan ; }
awam int Hasil { dapatkan ; ditetapkan ; }
}

Pengeluaran:

Penjelasan:

Di sini, kami mencipta kamus dengan kunci sebagai Acc_ID. Ini bertindak sebagai kunci untuk setiap rekod dalam kamus yang kami buat daripada senarai. Selepas itu, kami menggunakan gelung 'foreach' untuk mendapatkan kunci dan nilai (dengan atribut) menggunakan sifat kunci dan nilai.

Contoh 3: Kunci Pendua – ArgumentException

Buat senarai dengan dua rekod dan cuba tukarkannya menjadi kamus dengan Acc_ID sebagai kunci.

menggunakan Sistem ;
menggunakan Sistem.Linq ;
menggunakan Sistem.Koleksi.Generik ;

kelas Maklumat Akaun
{
awam statik batal Utama ( )
{
// Cipta Senarai jenis - Akaun.
Senarai butiran = baru Senaraikan ( ) ;
// Tambah 2 rekod ke Senarai.
butiran . Tambah ( baru Akaun { Acc_ID = 1 , Acc_Name = 'Linux' , Industri = 'Pendidikan' , Hasil = 2500 } ) ;
butiran . Tambah ( baru Akaun { Acc_ID = 1 , Acc_Name = 'Python' , Industri = 'Bootcamp' , Hasil = 10000 } ) ;

// Cuba buat Kamus daripada Senarai di atas dengan Kunci sebagai Acc_ID.
Kamus akaun_dict = butiran . KepadaKamus ( j => j . Acc_ID ) ;

}
}

// Cipta kelas bernama - Akaun dengan empat atribut
awam kelas Akaun
{
awam int Acc_ID { dapatkan ; ditetapkan ; }
awam tali Nama_Acc { dapatkan ; ditetapkan ; }
awam tali industri { dapatkan ; ditetapkan ; }
awam int Hasil { dapatkan ; ditetapkan ; }
}

Pengecualian:

Pengecualian yang tidak dikendalikan iaitu System.ArgumentException dibangkitkan kerana kuncinya adalah pendua (1) dalam kedua-dua Acc_ID.

Contoh 4: Sumber Null – ArgumentNullException

Buat senarai dengan jenis 'Akaun' dan tetapkan nol kepadanya. Cuba buat kamus daripada senarai sebelumnya dengan kunci sebagai Acc_ID.

menggunakan Sistem ;
menggunakan Sistem.Linq ;
menggunakan Sistem.Koleksi.Generik ;

kelas Maklumat Akaun
{
awam statik batal Utama ( )
{
// Cipta Senarai jenis - Akaun dan tetapkan null kepadanya.
Senarai butiran = null ;

// Cuba buat Kamus daripada Senarai di atas dengan Kunci sebagai Acc_ID.
Kamus akaun_dict = butiran . KepadaKamus ( j => j . Acc_ID ) ;

}
}

// Cipta kelas bernama - Akaun dengan empat atribut
awam kelas Akaun
{
awam int Acc_ID { dapatkan ; ditetapkan ; }
awam tali Nama_Acc { dapatkan ; ditetapkan ; }
awam tali industri { dapatkan ; ditetapkan ; }
awam int Hasil { dapatkan ; ditetapkan ; }
}

Pengecualian:

Pengecualian yang tidak dikendalikan iaitu System.ArgumentNullException dibangkitkan kerana senarai itu adalah batal.

Kesimpulan

Kami belajar cara mencipta kamus daripada IEnumerable (di sini, ia adalah senarai) menggunakan kaedah ToDictionary() dalam C# LINQ. Kaedah ini boleh dibebankan dalam dua cara. Kami membincangkan kedua-dua kaedah dengan contoh. Selain itu, kami mempelajari dua kes pengecualian yang dibangkitkan oleh kaedah ini apabila sumber data/ keySelector/ elementSelector adalah batal dan kuncinya adalah pendua.