Alakítsa át a C# LINQ-t szótárrá

Alakitsa At A C Linq T Szotarra



C# LINQ-ban szótár készítése ebből System.Collections.Generic.IEnumerable a ToDictionary() metódus használatával lehetséges. Ez a metódus a megadott -ből egy szótárat hoz létre. A System.ArgumentNullException akkor dob, ha az adatforrás, a keySelector vagy az elementSelector null. Továbbá, ha a keySelector duplikált kulcsokat állít elő két elemhez, a System.ArgumentException dobják. Ebben az útmutatóban megvitatjuk, hogyan lehet szótárt létrehozni a lista adatforrásából két módszer túlterhelésével.

Szintaxis:

1. Ha az adott adatforrásból a megadott kulcsválasztó és elemválasztó függvények szerint szeretne szótárt készíteni, akkor a következő módszerrel terhelje túl:









Paraméterek:



    1. forrás : Forrás lehet egy IEnumerable (lista), amelyben a szótár ebből a forrásból jön létre.
    2. kulcsválasztó : Ez egy olyan függvény, amely az egyes elemek kulcsának lekérésére szolgál.
    3. elemválasztó: Ez egy függvény, amely az elem lekérésére szolgál.
    4. TSource : Ez az adatforrás típusát meghatározó típusparaméter.
    5. TKulcs: Ez a típus paraméter, amely megadja a kulcs típusát.
    6. TEelem : Ez az elem típusát meghatározó típusparaméter.

2. Ha az adott adatforrásból a megadott kulcsválasztó funkció szerint szeretne szótárt készíteni, akkor a következő módszerrel terhelje túl:





Paraméterek:



    1. forrás : Forrás lehet egy IEnumerable (lista), amelyben a szótár ebből a forrásból jön létre.
    2. kulcsválasztó : Ez egy olyan függvény, amely az egyes elemek kulcsának lekérésére szolgál.
    3. Forrás: Ez az adatforrás típusára vonatkozik.
    4. TKey : Megadja a kulcs típusát.

1. példa: Meghatározott kulcsválasztó és elemválasztó funkció

Hozzon létre egy „Számla” típusú listát, amely négy attribútumot (Acc_ID, Acc_Name, Industry, Revenue) tartalmaz öt rekorddal.

1. Hozzon létre egy szótárt az előző listából úgy, hogy a kulccsal Acc_ID és az Értékkel a Acc_Name értékkel.
2. Hozzon létre egy szótárt az előző listából úgy, hogy a kulccsal Acc_Name és az Érték a bevétel.

segítségével Rendszer ;
segítségével System.Linq ;
segítségével System.Collections.Generic ;

osztály Számla információ
{
nyilvános statikus üres ( )
{
// Típuslista létrehozása - Fiók.
Lista részletek = új Lista ( ) ;
// 5 rekord hozzáadása a listához.
részletek . Hozzáadás ( új fiók { Acc_ID = 1 , Acc_Name = 'Linux' , Ipar = 'Oktatás' ,Bevétel = 2500 } ) ;
részletek . Hozzáadás ( új fiók { Acc_ID = 2 , Acc_Name = 'Piton' , Ipar = 'Kiképzőtábor' ,Bevétel = 10000 } ) ;
részletek . Hozzáadás ( új fiók { Acc_ID = 3 , Acc_Name = 'Jáva' , Ipar = 'Oktatás' ,Bevétel = 500 } ) ;
részletek . Hozzáadás ( új fiók { Acc_ID = 4 , Acc_Name = '.HÁLÓ' , Ipar = 'Kiképzés' ,Bevétel = 2080 } ) ;
részletek . Hozzáadás ( új fiók { Acc_ID = 5 , Acc_Name = 'Jóslat' , Ipar = 'Munka' ,Bevétel = 2090 } ) ;

// Hozzon létre egy szótárt a fenti listából úgy, hogy a kulcs a Acc_ID, az érték pedig a Acc_Name
Konzol . WriteLine ( ' ----A kulcs mint Acc_ID és az érték mint Acc_Name----' ) ;
Szótár accounts_dict1 = részletek . ToDictionary ( j => j . Acc_ID , j => j . Acc_Name ) ;

az egyes ( KeyValuePair i ban ben accounts_dict1 )
{
Konzol . WriteLine ( 'Felhasználónév :' + én . Kulcs + ' Felhasználónév :' + én . Érték ) ;
}

// Hozzon létre egy szótárt a fenti listából úgy, hogy a kulcs a Acc_Name és az érték a bevétel
Konzol . WriteLine ( ' ----Kulcs mint Acc_Name és Érték mint bevétel ----' ) ;
Szótár accounts_dict2 = részletek . ToDictionary ( l => l . Acc_Name , l => l . Bevétel ) ;

az egyes ( KeyValuePair k ban ben accounts_dict2 )
{
Konzol . WriteLine ( 'Felhasználónév :' + k . Kulcs + 'Számla bevétel:' + k . Érték ) ;
}

}
}

// Név osztály létrehozása - Fiók négy attribútummal
nyilvános osztály fiók
{
nyilvános int Acc_ID { kap ; készlet ; }
nyilvános húr Acc_Name { kap ; készlet ; }
nyilvános húr Ipar { kap ; készlet ; }
nyilvános int Bevétel { kap ; készlet ; }
}

Kimenet:

Magyarázat:

1. Hozzon létre egy „Fiók” nevű osztályt négy attribútummal.

2. A fő osztályban hozzon létre „Számla” típusú listát, és illesszen be öt rekordot.

3. Hozzon létre egy szótárt az előző listából úgy, hogy a kulcs a Acc_ID, az érték pedig a Acc_Name. Itt a TKey-t int-ként, a TElement-et pedig karakterláncként adjuk meg. A ToDictionary() metóduson belül átadjuk az Acc_ID-t a keySelector-ban és az Acc_Name-et az elementSelector-ban. Végül a „foreach” ciklust használjuk a szótár iterálására, és a kulcsok és értékek visszaadására a kulcs és érték tulajdonságaival.

4. Hozzon létre egy szótárt az előző listából úgy, hogy a kulccsal Acc_Name, az értékkel pedig a Bevétel. Itt a TKey-t karakterláncként, a TElement-et pedig int-ként adjuk meg. A ToDictionary() metóduson belül átadjuk az Acc_Name-t a keySelector-ban és a Revenue-t az elementSelector-ban. Végül a „foreach” ciklust használjuk a szótár iterálására, és a kulcsok és értékek visszaadására a kulcs és érték tulajdonságaival.

2. példa: Megadott kulcsválasztó

Használja az előző kódot, és hozzon létre egy szótárt az előző listából az Acc_ID kulccsal.

segítségével Rendszer ;
segítségével System.Linq ;
segítségével System.Collections.Generic ;

osztály Számla információ
{
nyilvános statikus üres ( )
{
// Típuslista létrehozása - Fiók.
Lista részletek = új Lista ( ) ;
// 5 rekord hozzáadása a listához.
részletek . Hozzáadás ( új fiók { Acc_ID = 1 , Acc_Name = 'Linux' , Ipar = 'Oktatás' ,Bevétel = 2500 } ) ;
részletek . Hozzáadás ( új fiók { Acc_ID = 2 , Acc_Name = 'Piton' , Ipar = 'Kiképzőtábor' ,Bevétel = 10000 } ) ;
részletek . Hozzáadás ( új fiók { Acc_ID = 3 , Acc_Name = 'Jáva' , Ipar = 'Oktatás' ,Bevétel = 500 } ) ;
részletek . Hozzáadás ( új fiók { Acc_ID = 4 , Acc_Name = '.HÁLÓ' , Ipar = 'Kiképzés' ,Bevétel = 2080 } ) ;
részletek . Hozzáadás ( új fiók { Acc_ID = 5 , Acc_Name = 'Jóslat' , Ipar = 'Munka' ,Bevétel = 2090 } ) ;

// Hozzon létre egy szótárt a fenti listából Acc_ID-vel.
Szótár accounts_dict = részletek . ToDictionary ( j => j . Acc_ID ) ;
az egyes ( KeyValuePair i ban ben accounts_dict )
{
Konzol . WriteLine ( 'Kulcs:' + én . Kulcs + '-->  Account-Name :' + én . Érték . Acc_Name
+ 'Fiók-iparág:' + én . Érték . Ipar
+ 'Számla bevétel:' + én . Érték . Bevétel ) ;
}

}
}

// Név osztály létrehozása - Fiók négy attribútummal
nyilvános osztály fiók
{
nyilvános int Acc_ID { kap ; készlet ; }
nyilvános húr Acc_Name { kap ; készlet ; }
nyilvános húr Ipar { kap ; készlet ; }
nyilvános int Bevétel { kap ; készlet ; }
}

Kimenet:

Magyarázat:

Itt létrehozunk egy szótárt, amelynek kulcsa Acc_ID. Ez a szótár minden rekordjának kulcsaként működik, amelyet a listából hoztunk létre. Ezt követően a „foreach” ciklus segítségével megkapjuk a kulcsokat és az értékeket (attribútumokkal együtt) a kulcs és érték tulajdonságok segítségével.

3. példa: Duplicate Keys – ArgumentException

Hozzon létre egy listát két rekordból, és próbálja meg szótárrá alakítani az Acc_ID kulcsával.

segítségével Rendszer ;
segítségével System.Linq ;
segítségével System.Collections.Generic ;

osztály Számla információ
{
nyilvános statikus üres ( )
{
// Típuslista létrehozása - Fiók.
Lista részletek = új Lista ( ) ;
// 2 rekord hozzáadása a listához.
részletek . Hozzáadás ( új fiók { Acc_ID = 1 , Acc_Name = 'Linux' , Ipar = 'Oktatás' ,Bevétel = 2500 } ) ;
részletek . Hozzáadás ( új fiók { Acc_ID = 1 , Acc_Name = 'Piton' , Ipar = 'Kiképzőtábor' ,Bevétel = 10000 } ) ;

// Próbáljon meg létrehozni egy szótárt a fenti listából úgy, hogy a kulcs Acc_ID legyen.
Szótár accounts_dict = részletek . ToDictionary ( j => j . Acc_ID ) ;

}
}

// Név osztály létrehozása - Fiók négy attribútummal
nyilvános osztály fiók
{
nyilvános int Acc_ID { kap ; készlet ; }
nyilvános húr Acc_Name { kap ; készlet ; }
nyilvános húr Ipar { kap ; készlet ; }
nyilvános int Bevétel { kap ; készlet ; }
}

Kivétel:

Felmerül egy kezeletlen kivétel, a System.ArgumentException, mivel a kulcs ismétlődő (1) mindkét Acc_ID-ben.

4. példa: Null Source – ArgumentNullException

Hozzon létre egy listát „Számla” típussal, és rendeljen hozzá nullát. Próbáljon meg létrehozni egy szótárt az előző listából az Acc_ID kulccsal.

segítségével Rendszer ;
segítségével System.Linq ;
segítségével System.Collections.Generic ;

osztály Számla információ
{
nyilvános statikus üres ( )
{
// Hozzon létre egy típusú listát - Fiók és rendeljen hozzá nullát.
Lista részletek = nulla ;

// Próbáljon meg létrehozni egy szótárt a fenti listából úgy, hogy a kulcs Acc_ID legyen.
Szótár accounts_dict = részletek . ToDictionary ( j => j . Acc_ID ) ;

}
}

// Név osztály létrehozása - Fiók négy attribútummal
nyilvános osztály fiók
{
nyilvános int Acc_ID { kap ; készlet ; }
nyilvános húr Acc_Name { kap ; készlet ; }
nyilvános húr Ipar { kap ; készlet ; }
nyilvános int Bevétel { kap ; készlet ; }
}

Kivétel:

A rendszer egy kezeletlen kivétel, a System.ArgumentNullException, mivel a lista nulla.

Következtetés

Megtanultuk, hogyan készítsünk szótárt az IEnumerable-ból (itt ez a lista) a ToDictionary() metódussal a C# LINQ-ban. Ezt a módszert kétféleképpen lehet túlterhelni. Mindkét módszert példákkal tárgyaltuk. Megtanultuk azt a két kivételes esetet is, amelyeket ez a módszer vet fel, amikor az adatforrás/keySelector/elementSelector nulla, és a kulcsok duplikálódnak.