Pretvorite C# LINQ u rječnik

Pretvorite C Linq U Rjecnik



U C# LINQ, stvaranje rječnika iz System.Collections.Generic.IEnumerable moguće je korištenjem metode ToDictionary(). Ova metoda stvara rječnik s iz zadanog . The System.ArgumentNullException izbacuje se ako je izvor podataka, KeySelector ili elementSelector null. Također, ako keySelector proizvodi duple ključeve za dva elementa, System.ArgumentException je bačeno. U ovom vodiču raspravljat ćemo o tome kako stvoriti rječnik iz izvora podataka popisa preopterećenjem dviju metoda.

Sintaksa:

1. Ako želite stvoriti rječnik u skladu s navedenim funkcijama birača ključa i elementa iz zadanog izvora podataka, preopteretite sljedeću metodu:









Parametri:



    1. izvor : Izvor može biti IEnumerable (popis) u kojem je rječnik kreiran iz ovog izvora.
    2. KeySelector : Ovo je funkcija koja se koristi za dobivanje ključa iz svakog elementa.
    3. elementSelector: Ovo je funkcija koja se koristi za dobivanje elementa.
    4. TSource : Ovo je parametar tipa koji specificira tip izvora podataka.
    5. TKljuč: Ovo je parametar tipa koji specificira tip ključa.
    6. TELEment : Ovo je parametar tipa koji specificira tip elementa.

2. Ako želite stvoriti rječnik prema navedenoj funkciji odabira ključa iz zadanog izvora podataka, preopteretite sljedeću metodu:





Parametri:



    1. izvor : Izvor može biti IEnumerable (popis) u kojem je rječnik kreiran iz ovog izvora.
    2. KeySelector : Ovo je funkcija koja se koristi za dobivanje ključa iz svakog elementa.
    3. TIzvor: Ovo se odnosi na vrstu izvora podataka.
    4. TKljuč : Određuje vrstu ključa.

Primjer 1: Navedeni birač tipki i funkcija odabira elementa

Napravite popis s vrstom 'Račun' koji sadrži četiri atributa (Acc_ID, Acc_Name, Industry, Revenue) s pet zapisa.

1. Stvorite rječnik iz prethodnog popisa s ključem kao Acc_ID i vrijednošću kao Acc_Name.
2. Stvorite rječnik iz prethodnog popisa s ključem kao Acc_Name i Value kao Revenue.

korištenjem Sustav ;
korištenjem System.Linq ;
korištenjem Sustav.Zbirke.Generički ;

razreda Informacije o računu
{
javnost statički poništiti Glavni ( )
{
// Kreiraj popis tipa - Račun.
Popis pojedinosti = novi Popis ( ) ;
// Dodavanje 5 zapisa na popis.
pojedinosti . Dodati ( novi Račun { Acc_ID = 1 , Naziv računa = 'Linux' , Industrija = 'Obrazovanje' ,Prihod = 2500 } ) ;
pojedinosti . Dodati ( novi Račun { Acc_ID = 2 , Naziv računa = 'Piton' , Industrija = 'Bootcamp' ,Prihod = 10000 } ) ;
pojedinosti . Dodati ( novi Račun { Acc_ID = 3 , Naziv računa = 'Java' , Industrija = 'Obrazovanje' ,Prihod = 500 } ) ;
pojedinosti . Dodati ( novi Račun { Acc_ID = 4 , Naziv računa = '.NETO' , Industrija = 'Trening' ,Prihod = 2080 } ) ;
pojedinosti . Dodati ( novi Račun { Acc_ID = 5 , Naziv računa = 'Oracle' , Industrija = 'Posao' ,Prihod = 2090 } ) ;

// Stvorite rječnik s gornjeg popisa s ključem kao Acc_ID i vrijednošću kao Acc_Name
Konzola . WriteLine ( ' ----Key kao Acc_ID i vrijednost kao Acc_Name----' ) ;
Rječnik accounts_dict1 = pojedinosti . ToDictionary ( j => j . Acc_ID , j => j . Acc_Name ) ;

za svakoga ( KeyValuePair i u accounts_dict1 )
{
Konzola . WriteLine ( 'ID računa :' + ja . Ključ + ' Korisničko ime :' + ja . Vrijednost ) ;
}

// Stvorite rječnik s gornjeg popisa s ključem kao Acc_Name i vrijednošću kao prihodom
Konzola . WriteLine ( ' ----Key kao Acc_Name i Value kao prihod----' ) ;
Rječnik accounts_dict2 = pojedinosti . ToDictionary ( l => l . Acc_Name , l => l . Prihod ) ;

za svakoga ( Par ključevavrijednosti k u accounts_dict2 )
{
Konzola . WriteLine ( 'Korisničko ime :' + k . Ključ + ' Račun - Prihod :' + k . Vrijednost ) ;
}

}
}

// Kreirajte klasu pod nazivom - Račun s četiri atributa
javnost razreda Račun
{
javnost int Acc_ID { dobiti ; postaviti ; }
javnost niz Acc_Name { dobiti ; postaviti ; }
javnost niz Industrija { dobiti ; postaviti ; }
javnost int Prihod { dobiti ; postaviti ; }
}

Izlaz:

Obrazloženje:

1. Napravite klasu pod nazivom 'Račun' s četiri atributa.

2. U glavnoj klasi kreirajte listu tipa “Račun” i u nju ubacite pet zapisa.

3. Stvorite rječnik iz prethodnog popisa s ključem kao Acc_ID i vrijednošću kao Acc_Name. Ovdje navodimo TKey kao int, a TElement kao string. Unutar metode ToDictionary() prosljeđujemo Acc_ID u keySelector i Acc_Name u elementSelector. Na kraju, koristimo petlju 'foreach' za ponavljanje rječnika i vraćanje ključeva i vrijednosti pomoću svojstava ključa i vrijednosti.

4. Stvorite rječnik iz prethodnog popisa s ključem kao Acc_Name i vrijednošću kao Revenue. Ovdje specificiramo TKey kao string, a TElement kao int. Unutar metode ToDictionary(), prosljeđujemo Acc_Name u keySelector i Revenue u elementSelector. Na kraju, koristimo petlju 'foreach' za ponavljanje rječnika i vraćanje ključeva i vrijednosti pomoću svojstava ključa i vrijednosti.

Primjer 2: Određeni birač tipki

Upotrijebite prethodni kod i stvorite rječnik iz prethodnog popisa s ključem kao Acc_ID.

korištenjem Sustav ;
korištenjem System.Linq ;
korištenjem Sustav.Zbirke.Generički ;

razreda Informacije o računu
{
javnost statički poništiti Glavni ( )
{
// Kreiraj popis tipa - Račun.
Popis pojedinosti = novi Popis ( ) ;
// Dodavanje 5 zapisa na popis.
pojedinosti . Dodati ( novi Račun { Acc_ID = 1 , Naziv računa = 'Linux' , Industrija = 'Obrazovanje' ,Prihod = 2500 } ) ;
pojedinosti . Dodati ( novi Račun { Acc_ID = 2 , Naziv računa = 'Piton' , Industrija = 'Bootcamp' ,Prihod = 10000 } ) ;
pojedinosti . Dodati ( novi Račun { Acc_ID = 3 , Naziv računa = 'Java' , Industrija = 'Obrazovanje' ,Prihod = 500 } ) ;
pojedinosti . Dodati ( novi Račun { Acc_ID = 4 , Naziv računa = '.NETO' , Industrija = 'Trening' ,Prihod = 2080 } ) ;
pojedinosti . Dodati ( novi Račun { Acc_ID = 5 , Naziv računa = 'Oracle' , Industrija = 'Posao' ,Prihod = 2090 } ) ;

// Stvorite rječnik s gornjeg popisa s ključem kao Acc_ID.
Rječnik accounts_dict = pojedinosti . ToDictionary ( j => j . Acc_ID ) ;
za svakoga ( KeyValuePair i u accounts_dict )
{
Konzola . WriteLine ( 'Ključ:' + ja . Ključ + '-->  Naziv računa :' + ja . Vrijednost . Naziv računa
+ ' Račun-industrija :' + ja . Vrijednost . Industrija
+ ' Račun - Prihod :' + ja . Vrijednost . Prihod ) ;
}

}
}

// Kreirajte klasu pod nazivom - Račun s četiri atributa
javnost razreda Račun
{
javnost int Acc_ID { dobiti ; postaviti ; }
javnost niz Naziv računa { dobiti ; postaviti ; }
javnost niz Industrija { dobiti ; postaviti ; }
javnost int Prihod { dobiti ; postaviti ; }
}

Izlaz:

Obrazloženje:

Ovdje stvaramo rječnik s ključem kao Acc_ID. Ovo služi kao ključ za svaki zapis u rječniku koji smo stvorili iz popisa. Nakon toga koristimo petlju 'foreach' za dobivanje ključeva i vrijednosti (s atributima) pomoću svojstava ključa i vrijednosti.

Primjer 3: Dvostruki ključevi – ArgumentException

Napravite popis s dva zapisa i pokušajte ga pretvoriti u rječnik s Acc_ID-om kao ključem.

korištenjem Sustav ;
korištenjem System.Linq ;
korištenjem Sustav.Zbirke.Generički ;

razreda Informacije o računu
{
javnost statički poništiti Glavni ( )
{
// Kreiraj popis tipa - Račun.
Popis pojedinosti = novi Popis ( ) ;
// Dodavanje 2 zapisa na popis.
pojedinosti . Dodati ( novi Račun { Acc_ID = 1 , Naziv računa = 'Linux' , Industrija = 'Obrazovanje' ,Prihod = 2500 } ) ;
pojedinosti . Dodati ( novi Račun { Acc_ID = 1 , Naziv računa = 'Piton' , Industrija = 'Bootcamp' ,Prihod = 10000 } ) ;

// Pokušajte stvoriti rječnik iz gornjeg popisa s ključem kao Acc_ID.
Rječnik accounts_dict = pojedinosti . ToDictionary ( j => j . Acc_ID ) ;

}
}

// Kreirajte klasu pod nazivom - Račun s četiri atributa
javnost razreda Račun
{
javnost int Acc_ID { dobiti ; postaviti ; }
javnost niz Acc_Name { dobiti ; postaviti ; }
javnost niz Industrija { dobiti ; postaviti ; }
javnost int Prihod { dobiti ; postaviti ; }
}

Iznimka:

Pokreće se neobrađena iznimka koja je System.ArgumentException jer je ključ duplikat (1) u oba Acc_ID-a.

Primjer 4: Null Source – ArgumentNullException

Napravite popis s vrstom 'Račun' i dodijelite mu null. Pokušajte stvoriti rječnik iz prethodnog popisa s ključem kao Acc_ID.

korištenjem Sustav ;
korištenjem System.Linq ;
korištenjem Sustav.Zbirke.Generički ;

razreda Informacije o računu
{
javnost statički poništiti Glavni ( )
{
// Kreirajte popis tipa - Račun i dodijelite mu null.
Popis pojedinosti = ništavan ;

// Pokušajte stvoriti rječnik iz gornjeg popisa s ključem kao Acc_ID.
Rječnik accounts_dict = pojedinosti . ToDictionary ( j => j . Acc_ID ) ;

}
}

// Kreirajte klasu pod nazivom - Račun s četiri atributa
javnost razreda Račun
{
javnost int Acc_ID { dobiti ; postaviti ; }
javnost niz Acc_Name { dobiti ; postaviti ; }
javnost niz Industrija { dobiti ; postaviti ; }
javnost int Prihod { dobiti ; postaviti ; }
}

Iznimka:

Pokreće se neobrađeni izuzetak koji je System.ArgumentNullException jer je popis null.

Zaključak

Naučili smo kako stvoriti rječnik iz IEnumerable (ovdje je popis) pomoću metode ToDictionary() u C# LINQ. Ova se metoda može preopteretiti na dva načina. Razmotrili smo obje metode s primjerima. Također, naučili smo dva slučaja iznimke koje pokreće ova metoda kada je izvor podataka/selektor ključeva/elementSelector nula, a ključevi su duplikati.