Muunna C# LINQ sanakirjaksi

Muunna C Linq Sanakirjaksi



C# LINQ:ssa sanakirjan luominen kohteesta System.Collections.Generic.IEnumerable on mahdollista ToDictionary()-menetelmällä. Tämä menetelmä luo sanakirjan annetusta :sta. The System.ArgumentNullException heitetään, jos tietolähde, keySelector tai elementSelector on tyhjä. Lisäksi, jos keySelector tuottaa päällekkäisiä avaimia kahdelle elementille, System.ArgumentException heitetään. Tässä oppaassa käsittelemme sanakirjan luomista luettelotietolähteestä ylikuormittamalla kaksi menetelmää.

Syntaksi:

1. Jos haluat luoda sanakirjan annetusta tietolähteestä määritettyjen näppäinvalitsimen ja elementtivalitsimen toimintojen mukaisesti, ylikuormita seuraava menetelmä:









Parametrit:



    1. lähde : Lähde voi olla IEnumerable (luettelo), jossa sanakirja luodaan tästä lähteestä.
    2. näppäinvalitsin : Tämä on toiminto, jolla saadaan avain jokaisesta elementistä.
    3. elementin valitsin: Tämä on funktio, jota käytetään elementin saamiseen.
    4. TSource : Tämä on tyyppiparametri, joka määrittää tietolähteen tyypin.
    5. TKey: Tämä on tyyppiparametri, joka määrittää avaimen tyypin.
    6. TElement : Tämä on tyyppiparametri, joka määrittää elementin tyypin.

2. Jos haluat luoda sanakirjan määritetyn näppäinvalitsintoiminnon mukaisesti annetusta tietolähteestä, ylikuormita seuraava menetelmä:





Parametrit:



    1. lähde : Lähde voi olla IEnumerable (luettelo), jossa sanakirja luodaan tästä lähteestä.
    2. näppäinvalitsin : Tämä on toiminto, jolla saadaan avain jokaisesta elementistä.
    3. Lähde: Tämä viittaa tietolähteen tyyppiin.
    4. TKey : Se määrittää avaimen tyypin.

Esimerkki 1: Määritetty näppäinvalitsin ja elementtivalitsintoiminto

Luo 'Tili'-tyyppinen luettelo, jossa on neljä attribuuttia (Acc_ID, Acc_Name, Industry, Revenue) ja viisi tietuetta.

1. Luo sanakirja edellisestä luettelosta avaimella Acc_ID ja arvolla Acc_Name.
2. Luo sanakirja edellisestä luettelosta avaimella Acc_Name ja arvo tulona.

käyttämällä Järjestelmä ;
käyttämällä System.Linq ;
käyttämällä System.Collections.Generic ;

luokkaa Tilitiedot
{
julkinen staattinen mitätön Main ( )
{
// Luo tyyppiluettelo - Tili.
Luettelon tiedot = Uusi Lista ( ) ;
// Lisää 5 tietuetta luetteloon.
yksityiskohdat . Lisätä ( Uusi Tili { Acc_ID = 1 , Acc_Name = 'Linux' , Ala = 'Koulutus' ,Tulot = 2500 } ) ;
yksityiskohdat . Lisätä ( Uusi Tili { Acc_ID = 2 , Acc_Name = 'Python' , Ala = 'Bootcamp' ,Tulot = 10 000 } ) ;
yksityiskohdat . Lisätä ( Uusi Tili { Acc_ID = 3 , Acc_Name = 'Java' , Ala = 'Koulutus' ,Tulot = 500 } ) ;
yksityiskohdat . Lisätä ( Uusi Tili { Acc_ID = 4 , Acc_Name = '.NETTO' , Ala = 'Koulutus' ,Tulot = 2080 } ) ;
yksityiskohdat . Lisätä ( Uusi Tili { Acc_ID = 5 , Acc_Name = 'Oraakkeli' , Ala = 'Job' ,Tulot = 2090 } ) ;

// Luo sanakirja yllä olevasta luettelosta ja avain on Acc_ID ja arvo Acc_Name
Konsoli . WriteLine ( ' ----Avain muodossa Acc_ID ja arvo muodossa Acc_Name----' ) ;
Sanakirja accounts_dict1 = yksityiskohdat . ToDictionary ( j => j . Acc_ID , j => j . Acc_Name ) ;

jokaiselle ( KeyValuePair i sisään accounts_dict1 )
{
Konsoli . WriteLine ( 'Tilin tunnus :' + i . Avain + ' Tilin nimi :' + i . Arvo ) ;
}

// Luo sanakirja yllä olevasta luettelosta ja avain on Acc_Name ja arvo tulona
Konsoli . WriteLine ( ' ----Avain nimellä Acc_Name ja Value as Revenue----' ) ;
Sanakirja accounts_dict2 = yksityiskohdat . ToDictionary ( l => l . Acc_Name , l => l . Tulot ) ;

jokaiselle ( KeyValuePair k sisään accounts_dict2 )
{
Konsoli . WriteLine ( 'Tilin nimi :' + k . Avain + 'Tili-tulot:' + k . Arvo ) ;
}

}
}

// Luo luokka nimeltä - Tili neljällä attribuutilla
julkinen luokkaa Tili
{
julkinen int Acc_ID { saada ; aseta ; }
julkinen merkkijono Acc_Name { saada ; aseta ; }
julkinen merkkijono Ala { saada ; aseta ; }
julkinen int Tulot { saada ; aseta ; }
}

Lähtö:

Selitys:

1. Luo luokka nimeltä 'Account', jossa on neljä attribuuttia.

2. Luo pääluokassa 'Tili'-tyyppinen lista ja lisää siihen viisi tietuetta.

3. Luo sanakirja edellisestä luettelosta avaimella Acc_ID ja arvolla Acc_Name. Tässä määritetään TKey int ja TElement merkkijonoksi. ToDictionary()-metodin sisällä välitämme Acc_ID:n keySelectorissa ja Acc_Name:n elementSelectorissa. Lopuksi käytämme foreach-silmukkaa sanakirjan iterointiin ja avainten ja arvojen palauttamiseen avain- ja arvoominaisuuksien avulla.

4. Luo sanakirja edellisestä luettelosta avaimella Acc_Name ja arvolla Revenue. Tässä määritetään TKey merkkijonoksi ja TElement int. ToDictionary()-metodin sisällä välitämme Acc_Name:n keySelectorissa ja Revenue-arvon elementSelectorissa. Lopuksi käytämme foreach-silmukkaa sanakirjan iterointiin ja avainten ja arvojen palauttamiseen avain- ja arvoominaisuuksien avulla.

Esimerkki 2: Määritetty avaimen valitsin

Käytä edellistä koodia ja luo sanakirja edellisestä luettelosta avaimella Acc_ID.

käyttämällä Järjestelmä ;
käyttämällä System.Linq ;
käyttämällä System.Collections.Generic ;

luokkaa Tilitiedot
{
julkinen staattinen mitätön Main ( )
{
// Luo tyyppiluettelo - Tili.
Luettelon tiedot = Uusi Lista ( ) ;
// Lisää 5 tietuetta luetteloon.
yksityiskohdat . Lisätä ( Uusi Tili { Acc_ID = 1 , Acc_Name = 'Linux' , Ala = 'Koulutus' ,Tulot = 2500 } ) ;
yksityiskohdat . Lisätä ( Uusi Tili { Acc_ID = 2 , Acc_Name = 'Python' , Ala = 'Bootcamp' ,Tulot = 10 000 } ) ;
yksityiskohdat . Lisätä ( Uusi Tili { Acc_ID = 3 , Acc_Name = 'Java' , Ala = 'Koulutus' ,Tulot = 500 } ) ;
yksityiskohdat . Lisätä ( Uusi Tili { Acc_ID = 4 , Acc_Name = '.NETTO' , Ala = 'Koulutus' ,Tulot = 2080 } ) ;
yksityiskohdat . Lisätä ( Uusi Tili { Acc_ID = 5 , Acc_Name = 'Oraakkeli' , Ala = 'Job' ,Tulot = 2090 } ) ;

// Luo sanakirja yllä olevasta luettelosta avaimella Acc_ID.
Sanakirja accounts_dict = yksityiskohdat . ToDictionary ( j => j . Acc_ID ) ;
jokaiselle ( KeyValuePair i sisään accounts_dict )
{
Konsoli . WriteLine ( 'Avain:' + i . Avain + '-->  Tilin nimi:' + i . Arvo . Acc_Name
+ 'Tili-toimiala:' + i . Arvo . Ala
+ 'Tili-tulot:' + i . Arvo . Tulot ) ;
}

}
}

// Luo luokka nimeltä - Tili neljällä attribuutilla
julkinen luokkaa Tili
{
julkinen int Acc_ID { saada ; aseta ; }
julkinen merkkijono Acc_Name { saada ; aseta ; }
julkinen merkkijono Ala { saada ; aseta ; }
julkinen int Tulot { saada ; aseta ; }
}

Lähtö:

Selitys:

Täällä luomme sanakirjan avaimella Acc_ID. Tämä toimii avaimena jokaiselle tietueelle sanakirjassa, jonka loimme luettelosta. Tämän jälkeen käytämme 'foreach' -silmukkaa avainten ja arvojen (attribuutteineen) saamiseen käyttämällä avain- ja arvoominaisuuksia.

Esimerkki 3: Päällekkäiset avaimet – ArgumentException

Luo luettelo kahdesta tietueesta ja yritä muuntaa se sanakirjaksi Acc_ID-avaimella.

käyttämällä Järjestelmä ;
käyttämällä System.Linq ;
käyttämällä System.Collections.Generic ;

luokkaa Tilitiedot
{
julkinen staattinen mitätön Main ( )
{
// Luo tyyppiluettelo - Tili.
Luettelon tiedot = Uusi Lista ( ) ;
// Lisää 2 tietuetta luetteloon.
yksityiskohdat . Lisätä ( Uusi Tili { Acc_ID = 1 , Acc_Name = 'Linux' , Ala = 'Koulutus' ,Tulot = 2500 } ) ;
yksityiskohdat . Lisätä ( Uusi Tili { Acc_ID = 1 , Acc_Name = 'Python' , Ala = 'Bootcamp' ,Tulot = 10 000 } ) ;

// Yritä luoda sanakirja yllä olevasta luettelosta avaimella Acc_ID.
Sanakirja accounts_dict = yksityiskohdat . ToDictionary ( j => j . Acc_ID ) ;

}
}

// Luo luokka nimeltä - Tili neljällä attribuutilla
julkinen luokkaa Tili
{
julkinen int Acc_ID { saada ; aseta ; }
julkinen merkkijono Acc_Name { saada ; aseta ; }
julkinen merkkijono Ala { saada ; aseta ; }
julkinen int Tulot { saada ; aseta ; }
}

Poikkeus:

Käsittelemätön poikkeus, joka on System.ArgumentException, nostetaan esiin, koska avain on kaksoiskappale (1) molemmissa Acc_ID:issä.

Esimerkki 4: Null Source – ArgumentNullException

Luo 'Tili'-tyyppinen luettelo ja määritä sille nolla. Yritä luoda sanakirja edellisestä luettelosta avaimella Acc_ID.

käyttämällä Järjestelmä ;
käyttämällä System.Linq ;
käyttämällä System.Collections.Generic ;

luokkaa Tilitiedot
{
julkinen staattinen mitätön Main ( )
{
// Luo tyyppiluettelo - Tili ja anna sille tyhjä arvo.
Luettelon tiedot = tyhjä ;

// Yritä luoda sanakirja yllä olevasta luettelosta avaimella Acc_ID.
Sanakirja accounts_dict = yksityiskohdat . ToDictionary ( j => j . Acc_ID ) ;

}
}

// Luo luokka nimeltä - Tili neljällä attribuutilla
julkinen luokkaa Tili
{
julkinen int Acc_ID { saada ; aseta ; }
julkinen merkkijono Acc_Name { saada ; aseta ; }
julkinen merkkijono Ala { saada ; aseta ; }
julkinen int Tulot { saada ; aseta ; }
}

Poikkeus:

Käsittelemätön poikkeus, joka on System.ArgumentNullException, nousee esiin, koska luettelo on tyhjä.

Johtopäätös

Opimme luomaan sanakirjan IEnumerablesta (tässä se on lista) käyttämällä ToDictionary()-metodia C# LINQ:ssa. Tämä menetelmä voidaan ylikuormittaa kahdella tavalla. Keskustelimme molemmista menetelmistä esimerkkien avulla. Opimme myös kaksi poikkeustapausta, jotka tämä menetelmä herättää, kun tietolähde/keySelector/elementSelector on tyhjä ja avaimet ovat päällekkäisiä.