Konvertuokite C# LINQ į žodyną

Konvertuokite C Linq I Zodyna



C# LINQ, kuriant žodyną iš System.Collections.Generic.IEnumerable galima naudojant ToDictionary() metodą. Šis metodas sukuria žodyną su iš nurodyto . The System.ArgumentNullException išmetamas, jei duomenų šaltinis, rakto parinkiklis arba elementSelector yra nulinis. Be to, jei raktų parinkiklis sukuria pasikartojančius dviejų elementų raktus, System.ArgumentException yra išmestas. Šiame vadove aptarsime, kaip sukurti žodyną iš sąrašo duomenų šaltinio perkraunant du metodus.

Sintaksė:

1. Jei norite sukurti žodyną pagal nurodytas raktų parinkiklio ir elementų parinkiklio funkcijas iš nurodyto duomenų šaltinio, perkraukite šį metodą:









Parametrai:



    1. šaltinis : Šaltinis gali būti IEnumerable (sąrašas), kuriame iš šio šaltinio sukuriamas žodynas.
    2. rakto parinkiklis : tai funkcija, naudojama norint gauti raktą iš kiekvieno elemento.
    3. elementų parinkiklis: Tai funkcija, kuri naudojama elementui gauti.
    4. TSource : Tai tipo parametras, nurodantis duomenų šaltinio tipą.
    5. TKaktas: Tai tipo parametras, nurodantis rakto tipą.
    6. TElementas : Tai tipo parametras, nurodantis elemento tipą.

2. Jei norite sukurti žodyną pagal nurodytą raktų parinkiklio funkciją iš nurodyto duomenų šaltinio, perkraukite šį metodą:





Parametrai:



    1. šaltinis : Šaltinis gali būti IEnumerable (sąrašas), kuriame iš šio šaltinio sukuriamas žodynas.
    2. rakto parinkiklis : tai funkcija, naudojama norint gauti raktą iš kiekvieno elemento.
    3. Šaltinis: Tai nurodo duomenų šaltinio tipą.
    4. TKey : nurodo rakto tipą.

1 pavyzdys: nurodytas rakto parinkiklis ir elemento parinkiklio funkcija

Sukurkite sąrašą su „Paskyros“ tipu, kuriame yra keturi atributai (Acc_ID, Acc_Name, Industry, Revenue) su penkiais įrašais.

1. Sukurkite žodyną iš ankstesnio sąrašo, naudodami raktą kaip Acc_ID, o reikšmę kaip Acc_Name.
2. Sukurkite žodyną iš ankstesnio sąrašo, naudodami raktą Acc_Name ir vertę kaip pajamas.

naudojant Sistema ;
naudojant Sistema.Linq ;
naudojant Sistema.Kolekcijos.Bendra ;

klasė Paskyros informacija
{
viešas statinis tuštuma Pagrindinis ( )
{
// Sukurti tipo sąrašą – Paskyra.
Sąrašo detalės = naujas Sąrašas ( ) ;
// Į sąrašą įtraukite 5 įrašus.
detales . Papildyti ( naujas sąskaita { Acc_ID = 1 , Acc_Name = 'Linux' , Industrija = 'Švietimas' , Pajamos = 2500 } ) ;
detales . Papildyti ( naujas sąskaita { Acc_ID = 2 , Acc_Name = 'Python' , Industrija = 'Bootcamp' , Pajamos = 10 000 } ) ;
detales . Papildyti ( naujas sąskaita { Acc_ID = 3 , Acc_Name = 'Java' , Industrija = 'Švietimas' , Pajamos = 500 } ) ;
detales . Papildyti ( naujas sąskaita { Acc_ID = 4 , Acc_Name = '.NET' , Industrija = 'Treniravimas' , Pajamos = 2080 m } ) ;
detales . Papildyti ( naujas sąskaita { Acc_ID = 5 , Acc_Name = 'Orakulas' , Industrija = 'Darbas' , Pajamos = 2090 m } ) ;

// Sukurkite žodyną iš aukščiau pateikto sąrašo, naudodami raktą kaip Acc_ID, o reikšmę kaip Acc_Name
Konsolė . WriteLine ( ' ----Raktas kaip Acc_ID ir reikšmė kaip Acc_Name----' ) ;
Žodynas accounts_dict1 = detales . ToDictionary ( j => j . Acc_ID , j => j . Acc_Name ) ;

kiekvienam ( KeyValuePair i in accounts_dict1 )
{
Konsolė . WriteLine ( 'Sąskaitos identifikavimo kodas :' + i . Raktas + ' Paskyros vardas :' + i . Vertė ) ;
}

// Sukurkite žodyną iš anksčiau pateikto sąrašo naudodami raktą kaip Acc_Name ir vertę kaip pajamas
Konsolė . WriteLine ( ' ----Raktas kaip Acc_Name ir vertė kaip pajamos ----' ) ;
Žodynas accounts_dict2 = detales . ToDictionary ( l => l . Acc_Name , l => l . Pajamos ) ;

kiekvienam ( KeyValuePair k in accounts_dict2 )
{
Konsolė . WriteLine ( 'Paskyros vardas :' + k . Raktas + 'Paskyros pajamos:' + k . Vertė ) ;
}

}
}

// Sukurti klasę pavadinimu - Paskyra su keturiais atributais
viešas klasė sąskaita
{
viešas tarpt Acc_ID { gauti ; rinkinys ; }
viešas styga Acc_Name { gauti ; rinkinys ; }
viešas styga Industrija { gauti ; rinkinys ; }
viešas tarpt Pajamos { gauti ; rinkinys ; }
}

Išvestis:

Paaiškinimas:

1. Sukurkite klasę pavadinimu „Paskyra“ su keturiais atributais.

2. Pagrindinėje klasėje sukurkite „Sąskaitos“ tipo sąrašą ir įterpkite į jį penkis įrašus.

3. Sukurkite žodyną iš ankstesnio sąrašo, naudodami raktą kaip Acc_ID ir reikšmę kaip Acc_Name. Čia mes nurodome TKey kaip int ir TElement kaip eilutę. Metodo ToDictionary() viduje mes perduodame Acc_ID raktų parinkiklyje ir Acc_Name elementą Selector. Galiausiai naudojame „foreach“ kilpą, kad kartotume žodyną ir grąžintume raktus bei reikšmes naudodami rakto ir reikšmės ypatybes.

4. Sukurkite žodyną iš ankstesnio sąrašo, naudodami raktą Acc_Name ir reikšmę kaip Pajamos. Čia nurodome TKey kaip eilutę ir TElement kaip int. Metodo ToDictionary() viduje mes perduodame Acc_Name raktų parinkiklyje ir Revenue elemente Selector. Galiausiai naudojame „foreach“ kilpą, kad kartotume žodyną ir grąžintume raktus bei reikšmes naudodami rakto ir reikšmės ypatybes.

2 pavyzdys: nurodytas rakto parinkiklis

Naudokite ankstesnį kodą ir sukurkite žodyną iš ankstesnio sąrašo, naudodami raktą kaip Acc_ID.

naudojant Sistema ;
naudojant Sistema.Linq ;
naudojant Sistema.Kolekcijos.Bendra ;

klasė Paskyros informacija
{
viešas statinis tuštuma Pagrindinis ( )
{
// Sukurti tipo sąrašą – Paskyra.
Sąrašo detalės = naujas Sąrašas ( ) ;
// Į sąrašą įtraukite 5 įrašus.
detales . Papildyti ( naujas sąskaita { Acc_ID = 1 , Acc_Name = 'Linux' , Industrija = 'Švietimas' , Pajamos = 2500 } ) ;
detales . Papildyti ( naujas sąskaita { Acc_ID = 2 , Acc_Name = 'Python' , Industrija = 'Bootcamp' , Pajamos = 10 000 } ) ;
detales . Papildyti ( naujas sąskaita { Acc_ID = 3 , Acc_Name = 'Java' , Industrija = 'Švietimas' , Pajamos = 500 } ) ;
detales . Papildyti ( naujas sąskaita { Acc_ID = 4 , Acc_Name = '.NET' , Industrija = 'Treniravimas' , Pajamos = 2080 m } ) ;
detales . Papildyti ( naujas sąskaita { Acc_ID = 5 , Acc_Name = 'Orakulas' , Industrija = 'Darbas' , Pajamos = 2090 m } ) ;

// Sukurkite žodyną iš aukščiau pateikto sąrašo, naudodami raktą kaip Acc_ID.
Žodynas accounts_dict = detales . ToDictionary ( j => j . Acc_ID ) ;
kiekvienam ( KeyValuePair i in accounts_dict )
{
Konsolė . WriteLine ( 'Raktas:' + i . Raktas + '-->  Paskyros pavadinimas :' + i . Vertė . Acc_Name
+ 'Sąskaita-pramonė:' + i . Vertė . Industrija
+ 'Paskyros pajamos:' + i . Vertė . Pajamos ) ;
}

}
}

// Sukurti klasę pavadinimu - Paskyra su keturiais atributais
viešas klasė sąskaita
{
viešas tarpt Acc_ID { gauti ; rinkinys ; }
viešas styga Acc_Name { gauti ; rinkinys ; }
viešas styga Industrija { gauti ; rinkinys ; }
viešas tarpt Pajamos { gauti ; rinkinys ; }
}

Išvestis:

Paaiškinimas:

Čia sukuriame žodyną, kurio raktas yra Acc_ID. Tai veikia kaip raktas kiekvienam įrašui žodyne, kurį sukūrėme iš sąrašo. Po to mes naudojame „foreach“ kilpą, kad gautume raktus ir reikšmes (su atributais), naudodami rakto ir reikšmės ypatybes.

3 pavyzdys: pasikartojantys raktai – ArgumentException

Sukurkite sąrašą su dviem įrašais ir pabandykite konvertuoti jį į žodyną naudodami raktą Acc_ID.

naudojant Sistema ;
naudojant Sistema.Linq ;
naudojant Sistema.Kolekcijos.Bendra ;

klasė Paskyros informacija
{
viešas statinis tuštuma Pagrindinis ( )
{
// Sukurti tipo sąrašą – Paskyra.
Sąrašo detalės = naujas Sąrašas ( ) ;
// Pridėti 2 įrašus į sąrašą.
detales . Papildyti ( naujas sąskaita { Acc_ID = 1 , Acc_Name = 'Linux' , Industrija = 'Švietimas' , Pajamos = 2500 } ) ;
detales . Papildyti ( naujas sąskaita { Acc_ID = 1 , Acc_Name = 'Python' , Industrija = 'Bootcamp' , Pajamos = 10 000 } ) ;

// Pabandykite sukurti žodyną iš aukščiau pateikto sąrašo, naudodami raktą kaip Acc_ID.
Žodynas accounts_dict = detales . ToDictionary ( j => j . Acc_ID ) ;

}
}

// Sukurti klasę pavadinimu - Paskyra su keturiais atributais
viešas klasė sąskaita
{
viešas tarpt Acc_ID { gauti ; rinkinys ; }
viešas styga Acc_Name { gauti ; rinkinys ; }
viešas styga Industrija { gauti ; rinkinys ; }
viešas tarpt Pajamos { gauti ; rinkinys ; }
}

Išimtis:

Neapdorota išimtis, kuri yra System.ArgumentException, iškeliama, nes raktas yra dublikatas (1) abiejuose Acc_ID.

4 pavyzdys: Nulinis šaltinis – ArgumentNullException

Sukurkite sąrašą su „Paskyros“ tipu ir priskirkite jam nulį. Pabandykite sukurti žodyną iš ankstesnio sąrašo, naudodami raktą kaip Acc_ID.

naudojant Sistema ;
naudojant Sistema.Linq ;
naudojant Sistema.Kolekcijos.Bendra ;

klasė Paskyros informacija
{
viešas statinis tuštuma Pagrindinis ( )
{
// Sukurkite tipo sąrašą – paskyra ir priskirkite jai nulį.
Sąrašo detalės = nulinis ;

// Pabandykite sukurti žodyną iš aukščiau pateikto sąrašo, naudodami raktą kaip Acc_ID.
Žodynas accounts_dict = detales . ToDictionary ( j => j . Acc_ID ) ;

}
}

// Sukurti klasę pavadinimu - Paskyra su keturiais atributais
viešas klasė sąskaita
{
viešas tarpt Acc_ID { gauti ; rinkinys ; }
viešas styga Acc_Name { gauti ; rinkinys ; }
viešas styga Industrija { gauti ; rinkinys ; }
viešas tarpt Pajamos { gauti ; rinkinys ; }
}

Išimtis:

Neapdorota išimtis, kuri yra System.ArgumentNullException, iškeliama, nes sąrašas yra nulinis.

Išvada

Sužinojome, kaip sukurti žodyną iš IEnumerable (čia yra sąrašas), naudojant ToDictionary() metodą C# LINQ. Šis metodas gali būti perkrautas dviem būdais. Abu būdus aptarėme pateikdami pavyzdžius. Taip pat sužinojome du išimčių atvejus, kurie iškeliami taikant šį metodą, kai duomenų šaltinis/keySelector/elementSelector yra nulinis, o raktai pasikartoja.