Teisendage C# LINQ sõnaraamatuks

Teisendage C Linq Sonaraamatuks



C# LINQ-is sõnastiku loomine System.Collections.Generic.IEnumerable on võimalik meetodi ToDictionary() abil. See meetod loob antud põhjal sõnastiku -ga. The System.ArgumentNullException visatakse, kui andmeallikas, võtmevalija või elementSelector on null. Samuti, kui võtmevalija toodab kahe elemendi jaoks dubleerivaid võtmeid, siis System.ArgumentException visatakse. Selles juhendis arutame, kuidas luua loendi andmeallikast sõnastikku kahe meetodi ülekoormamisega.

Süntaks:

1. Kui soovite luua sõnastikku vastavalt määratud võtmevalija ja elemendivalija funktsioonidele antud andmeallikast, laadige üle järgmine meetod:









Parameetrid:



    1. allikas : Allikas võib olla IEnumerable (loend), milles sõnastik luuakse sellest allikast.
    2. klahvivalija : See on funktsioon, mida kasutatakse võtme hankimiseks igast elemendist.
    3. elementValija: See on funktsioon, mida kasutatakse elemendi hankimiseks.
    4. TSource : see on tüübiparameeter, mis määrab andmeallika tüübi.
    5. TKey: See on tüübi parameeter, mis määrab võtme tüübi.
    6. 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:



    1. allikas : Allikas võib olla IEnumerable (loend), milles sõnastik luuakse sellest allikast.
    2. klahvivalija : See on funktsioon, mida kasutatakse võtme hankimiseks igast elemendist.
    3. Allikas: See viitab andmeallika tüübile.
    4. 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 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 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.