Syntaksi:
1. Jos haluat luoda sanakirjan annetusta tietolähteestä määritettyjen näppäinvalitsimen ja elementtivalitsimen toimintojen mukaisesti, ylikuormita seuraava menetelmä:
Parametrit:
-
- lähde : Lähde voi olla IEnumerable (luettelo), jossa sanakirja luodaan tästä lähteestä.
- näppäinvalitsin : Tämä on toiminto, jolla saadaan avain jokaisesta elementistä.
- elementin valitsin: Tämä on funktio, jota käytetään elementin saamiseen.
- TSource : Tämä on tyyppiparametri, joka määrittää tietolähteen tyypin.
- TKey: Tämä on tyyppiparametri, joka määrittää avaimen tyypin.
- 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:
-
- lähde : Lähde voi olla IEnumerable (luettelo), jossa sanakirja luodaan tästä lähteestä.
- näppäinvalitsin : Tämä on toiminto, jolla saadaan avain jokaisesta elementistä.
- Lähde: Tämä viittaa tietolähteen tyyppiin.
- 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ä 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ä.