Süntaks:
1. Kui soovite luua sõnastikku vastavalt määratud võtmevalija ja elemendivalija funktsioonidele antud andmeallikast, laadige üle järgmine meetod:
Parameetrid:
-
- allikas : Allikas võib olla IEnumerable (loend), milles sõnastik luuakse sellest allikast.
- klahvivalija : See on funktsioon, mida kasutatakse võtme hankimiseks igast elemendist.
- elementValija: See on funktsioon, mida kasutatakse elemendi hankimiseks.
- TSource : see on tüübiparameeter, mis määrab andmeallika tüübi.
- TKey: See on tüübi parameeter, mis määrab võtme tüübi.
- TElement : see on tüübi parameeter, mis määrab elemendi tüübi.
2. Kui soovite luua sõnastikku vastavalt määratud võtmevalija funktsioonile antud andmeallikast, laadige üle järgmine meetod:
Parameetrid:
-
- allikas : Allikas võib olla IEnumerable (loend), milles sõnastik luuakse sellest allikast.
- klahvivalija : See on funktsioon, mida kasutatakse võtme hankimiseks igast elemendist.
- Allikas: See viitab andmeallika tüübile.
- TKey : määrab võtme tüübi.
Näide 1: Määratud võtmevalija ja elemendivalija funktsioon
Looge loendi tüübiga „Konto”, mis sisaldab nelja atribuuti (Acc_ID, Acc_Name, Industry, Revenue) viie kirjega.
1. Looge eelmisest loendist sõnastik võtmega Acc_ID ja väärtusega Acc_Name.
2. Looge eelmisest loendist sõnastik võtmega Acc_Name ja Väärtus tuluna.
kasutades System.Linq ;
kasutades Süsteem.Kogud.Üldine ;
klass Kontoteave
{
avalik staatiline tühine Peamine ( )
{
// Looge tüübiloend – konto.
Loendi üksikasjad = uus Nimekiri ( ) ;
// Lisage loendisse 5 kirjet.
üksikasjad . Lisama ( uus Konto { Acc_ID = 1 , Acc_Name = 'Linux' , Tööstus = 'Haridus' ,Tulu = 2500 } ) ;
üksikasjad . Lisama ( uus Konto { Acc_ID = 2 , Acc_Name = 'Python' , Tööstus = 'Bootcamp' ,Tulu = 10 000 } ) ;
üksikasjad . Lisama ( uus Konto { Acc_ID = 3 , Acc_Name = 'Java' , Tööstus = 'Haridus' ,Tulu = 500 } ) ;
üksikasjad . Lisama ( uus Konto { Acc_ID = 4 , Acc_Name = '.NET' , Tööstus = 'Treening' ,Tulu = 2080 } ) ;
üksikasjad . Lisama ( uus Konto { Acc_ID = 5 , Acc_Name = 'Oraakel' , Tööstus = 'Töö' ,Tulu = 2090 } ) ;
// Looge ülaltoodud loendist sõnastik võtmega Acc_ID ja väärtusega Acc_Name
konsool . WriteLine ( ' ----Võti kui Acc_ID ja väärtus kui Acc_Name----' ) ;
Sõnastik accounts_dict1 = üksikasjad . ToDictionary ( j => j . Acc_ID , j => j . Acc_Name ) ;
igaühele ( KeyValuePair i sisse accounts_dict1 )
{
konsool . WriteLine ( 'Konto ID :' + i . Võti + ' Kasutaja nimi :' + i . Väärtus ) ;
}
// Looge ülaltoodud loendist sõnastik, mille võti on Acc_Name ja väärtus on tulu
konsool . WriteLine ( ' ---- Võti kui Acc_Name ja väärtus tuluna ----' ) ;
Sõnastik accounts_dict2 = üksikasjad . ToDictionary ( l => l . Acc_Name , l => l . Tulu ) ;
igaühele ( KeyValuePair k sisse accounts_dict2 )
{
konsool . WriteLine ( 'Kasutaja nimi :' + k . Võti + 'Konto tulu:' + k . Väärtus ) ;
}
}
}
// Looge klass nimega – nelja atribuudiga konto
avalik klass Konto
{
avalik int Acc_ID { saada ; seatud ; }
avalik string Acc_Name { saada ; seatud ; }
avalik string Tööstus { saada ; seatud ; }
avalik int Tulu { saada ; seatud ; }
}
Väljund:
Selgitus:
1. Looge nelja atribuudiga klass nimega 'Konto'.
2. Loo põhiklassis “Konto” tüüpi nimekiri ja sisesta sinna viis kirjet.
3. Looge eelmisest loendist sõnastik võtmega Acc_ID ja väärtusega Acc_Name. Siin määrame TKee kui int ja TElement stringina. Meetodi ToDictionary() sees edastame võtmevalikus Acc_ID ja elementSelectoris Acc_Name. Lõpuks kasutame sõnastiku kordamiseks ja võtmete ja väärtuste tagastamiseks tsüklit 'foreach', kasutades võtme ja väärtuse atribuute.
4. Looge eelmisest loendist sõnastik võtmega Acc_Name ja väärtusega Tulu. Siin määrame TKey stringina ja TElement kui int. Meetodi ToDictionary() sees edastame võtmevalikus Acc_Name ja elementSelectoris tulu. Lõpuks kasutame sõnastiku kordamiseks ja võtmete ja väärtuste tagastamiseks tsüklit 'foreach', kasutades võtme ja väärtuse atribuute.
Näide 2: Määratud võtme valija
Kasutage eelmist koodi ja looge eelmisest loendist sõnastik võtmega Acc_ID.
kasutades Süsteem ;kasutades System.Linq ;
kasutades Süsteem.Kogud.Üldine ;
klass Kontoteave
{
avalik staatiline tühine Peamine ( )
{
// Looge tüübiloend – konto.
Loendi üksikasjad = uus Nimekiri ( ) ;
// Lisage loendisse 5 kirjet.
üksikasjad . Lisama ( uus Konto { Acc_ID = 1 , Acc_Name = 'Linux' , Tööstus = 'Haridus' ,Tulu = 2500 } ) ;
üksikasjad . Lisama ( uus Konto { Acc_ID = 2 , Acc_Name = 'Python' , Tööstus = 'Bootcamp' ,Tulu = 10 000 } ) ;
üksikasjad . Lisama ( uus Konto { Acc_ID = 3 , Acc_Name = 'Java' , Tööstus = 'Haridus' ,Tulu = 500 } ) ;
üksikasjad . Lisama ( uus Konto { Acc_ID = 4 , Acc_Name = '.NET' , Tööstus = 'Treening' ,Tulu = 2080 } ) ;
üksikasjad . Lisama ( uus Konto { Acc_ID = 5 , Acc_Name = 'Oraakel' , Tööstus = 'Töö' ,Tulu = 2090 } ) ;
// Looge ülaltoodud loendist sõnastik võtmega Acc_ID.
Sõnastik accounts_dict = üksikasjad . ToDictionary ( j => j . Acc_ID ) ;
igaühele ( KeyValuePair i sisse kontod_dikt )
{
konsool . WriteLine ( 'Võti:' + i . Võti + '--> Konto nimi:' + i . Väärtus . Acc_Name
+ 'Kontotööstus:' + i . Väärtus . Tööstus
+ 'Konto tulu:' + i . Väärtus . Tulu ) ;
}
}
}
// Looge klass nimega – nelja atribuudiga konto
avalik klass Konto
{
avalik int Acc_ID { saada ; seatud ; }
avalik string Acc_Name { saada ; seatud ; }
avalik string Tööstus { saada ; seatud ; }
avalik int Tulu { saada ; seatud ; }
}
Väljund:
Selgitus:
Siin loome sõnastiku võtmega Acc_ID. See toimib võtmena iga kirje jaoks sõnastikus, mille oleme loendist loonud. Pärast seda kasutame tsüklit 'foreach', et saada võtmed ja väärtused (koos atribuutidega), kasutades võtme ja väärtuse atribuute.
Näide 3: Dubleerivad võtmed – ArgumentException
Looge kahe kirjega loend ja proovige teisendada see sõnastikuks võtmega Acc_ID.
kasutades Süsteem ;kasutades System.Linq ;
kasutades Süsteem.Kogud.Üldine ;
klass Kontoteave
{
avalik staatiline tühine Peamine ( )
{
// Looge tüübiloend – konto.
Loendi üksikasjad = uus Nimekiri ( ) ;
// Lisage loendisse 2 kirjet.
üksikasjad . Lisama ( uus Konto { Acc_ID = 1 , Acc_Name = 'Linux' , Tööstus = 'Haridus' ,Tulu = 2500 } ) ;
üksikasjad . Lisama ( uus Konto { Acc_ID = 1 , Acc_Name = 'Python' , Tööstus = 'Bootcamp' ,Tulu = 10 000 } ) ;
// Proovige ülaltoodud loendist luua sõnastik võtmega Acc_ID.
Sõnastik accounts_dict = üksikasjad . ToDictionary ( j => j . Acc_ID ) ;
}
}
// Looge klass nimega – nelja atribuudiga konto
avalik klass Konto
{
avalik int Acc_ID { saada ; seatud ; }
avalik string Acc_Name { saada ; seatud ; }
avalik string Tööstus { saada ; seatud ; }
avalik int Tulu { saada ; seatud ; }
}
Erand:
Käsitlemata erand, milleks on System.ArgumentException, tõstetakse esile, kuna võti on mõlemas Acc_ID-s duplikaat (1).
Näide 4: Null Source – ArgumentNullException
Looge loend tüübiga 'Konto' ja määrake sellele null. Proovige luua eelmisest loendist sõnastik võtmega Acc_ID.
kasutades Süsteem ;kasutades System.Linq ;
kasutades Süsteem.Kogud.Üldine ;
klass Kontoteave
{
avalik staatiline tühine Peamine ( )
{
// Looge tüübiloend – konto ja määrake sellele null.
Loendi üksikasjad = null ;
// Proovige ülaltoodud loendist luua sõnastik võtmega Acc_ID.
Sõnastik accounts_dict = üksikasjad . ToDictionary ( j => j . Acc_ID ) ;
}
}
// Looge klass nimega – nelja atribuudiga konto
avalik klass Konto
{
avalik int Acc_ID { saada ; seatud ; }
avalik string Acc_Name { saada ; seatud ; }
avalik string Tööstus { saada ; seatud ; }
avalik int Tulu { saada ; seatud ; }
}
Erand:
Käsitlemata erand, milleks on System.ArgumentNullException, tõstetakse esile, kuna loend on null.
Järeldus
Õppisime, kuidas luua sõnastikku IEnumerableist (siin on loend), kasutades meetodit ToDictionary() C# LINQ-is. Seda meetodit saab üle koormata kahel viisil. Arutasime mõlemat meetodit näidetega. Samuti saime teada kaks erandjuhtu, mis selle meetodi abil esile kerkivad, kui andmeallika/võtmevalija/elementivalija väärtus on null ja võtmed on dubleeritud.