Converteix el C# LINQ en diccionari

Converteix El C Linq En Diccionari



En C# LINQ, creant un diccionari a partir de System.Collections.Generic.IEnumerable és possible mitjançant el mètode ToDictionary(). Aquest mètode crea un diccionari amb a partir del donat. El System.ArgumentNullException es llança si la font de dades, keySelector o elementSelector és nul. A més, si el keySelector produeix claus duplicades per a dos elements, el System.ArgumentException es llança. En aquesta guia, parlarem de com crear un diccionari a partir de la font de dades de la llista sobrecarregant dos mètodes.

Sintaxi:

1. Si voleu crear un diccionari segons les funcions especificades de selector de clau i selector d'elements a partir de la font de dades donada, sobrecarregueu el mètode següent:









Paràmetres:



    1. font : La font pot ser un IEnumerable (llista) en què el diccionari es crea a partir d'aquesta font.
    2. keySelector : Aquesta és una funció que s'utilitza per obtenir la clau de cada element.
    3. elementSelector: Aquesta és una funció que s'utilitza per obtenir l'element.
    4. TSfont : Aquest és el paràmetre de tipus que especifica el tipus de la font de dades.
    5. TKey: Aquest és el paràmetre de tipus que especifica el tipus de clau.
    6. TElement : Aquest és el paràmetre de tipus que especifica el tipus d'element.

2. Si voleu crear un diccionari segons la funció de selecció de tecles especificada a partir de la font de dades proporcionada, sobrecarregueu el mètode següent:





Paràmetres:



    1. font : La font pot ser un IEnumerable (llista) en què el diccionari es crea a partir d'aquesta font.
    2. keySelector : Aquesta és una funció que s'utilitza per obtenir la clau de cada element.
    3. TSfont: Això fa referència al tipus de font de dades.
    4. Tecla T : Especifica el tipus de clau.

Exemple 1: selector de clau especificat i funció de selector d'elements

Creeu una llista amb el tipus 'Compte' que contingui quatre atributs (Acc_ID, Acc_Name, Indústria, Ingressos) amb cinc registres.

1. Creeu un diccionari de la llista anterior amb la clau com a Acc_ID i el valor com a Acc_Name.
2. Creeu un diccionari de la llista anterior amb la clau Acc_Name i Value as Revenue.

utilitzant Sistema ;
utilitzant System.Linq ;
utilitzant System.Collections.Generic ;

classe Informació del compte
{
públic estàtica buit Principal ( )
{
// Crea una llista de tipus - Compte.
Detalls de la llista = nou Llista ( ) ;
// Afegeix 5 registres a la llista.
detalls . Afegeix ( nou Compte { Acc_ID = 1 , Acc_Name = 'Linux' , Indústria = 'Educació' , Ingressos = 2500 } ) ;
detalls . Afegeix ( nou Compte { Acc_ID = 2 , Acc_Name = 'Python' , Indústria = 'Camp d'entrenament' , Ingressos = 10000 } ) ;
detalls . Afegeix ( nou Compte { Acc_ID = 3 , Acc_Name = 'Java' , Indústria = 'Educació' , Ingressos = 500 } ) ;
detalls . Afegeix ( nou Compte { Acc_ID = 4 , Acc_Name = '.NET' , Indústria = 'entrenament' , Ingressos = 2080 } ) ;
detalls . Afegeix ( nou Compte { Acc_ID = 5 , Acc_Name = 'Oracle' , Indústria = 'Treball' , Ingressos = 2090 } ) ;

// Creeu un diccionari de la llista anterior amb la clau com a Acc_ID i el valor com a Acc_Name
Consola . WriteLine ( ' ----Clau com a Acc_ID i valor com a Acc_Name----' ) ;
Diccionari comptes_dict1 = detalls . Al Diccionari ( j => j . Acc_ID , j => j . Acc_Name ) ;

per cadascú ( KeyValuePair i en comptes_dict1 )
{
Consola . WriteLine ( 'Identificador del compte :' + i . clau + ' Nom del compte :' + i . Valor ) ;
}

// Creeu un diccionari de la llista anterior amb la clau com a Acc_Name i el valor com a ingressos
Consola . WriteLine ( ' ----Clau com Acc_Name i valor com a ingressos----' ) ;
Diccionari comptes_dict2 = detalls . Al Diccionari ( l => l . Acc_Name , l => l . Ingressos ) ;

per cadascú ( KeyValuePair k en comptes_dict2 )
{
Consola . WriteLine ( 'Nom del compte :' + k . clau + 'Compte-Ingressos:' + k . Valor ) ;
}

}
}

// Crea una classe anomenada - Compte amb quatre atributs
públic classe Compte
{
públic int Acc_ID { aconseguir ; conjunt ; }
públic corda Acc_Name { aconseguir ; conjunt ; }
públic corda Indústria { aconseguir ; conjunt ; }
públic int Ingressos { aconseguir ; conjunt ; }
}

Sortida:

Explicació:

1. Creeu una classe anomenada 'Compte' amb quatre atributs.

2. A la classe principal, creeu una llista de tipus 'Compte' i inseriu-hi cinc registres.

3. Creeu un diccionari de la llista anterior amb la clau com a Acc_ID i el valor com a Acc_Name. Aquí, especifiquem la TKey com a int i el TElement com a cadena. Dins del mètode ToDictionary(), passem l'Acc_ID al keySelector i l'Acc_Name a l'elementSelector. Finalment, utilitzem el bucle 'foreach' per iterar el diccionari i retornar les claus i els valors utilitzant les propietats clau i valor.

4. Creeu un diccionari de la llista anterior amb la clau Acc_Name i el valor com a Ingressos. Aquí, especifiquem la TKey com a cadena i el TElement com a int. Dins del mètode ToDictionary(), passem l'Acc_Name al keySelector i els Ingressos a l'elementSelector. Finalment, utilitzem el bucle 'foreach' per iterar el diccionari i retornar les claus i els valors utilitzant les propietats clau i valor.

Exemple 2: selector de clau especificat

Utilitzeu el codi anterior i creeu un diccionari de la llista anterior amb la clau Acc_ID.

utilitzant Sistema ;
utilitzant System.Linq ;
utilitzant System.Collections.Generic ;

classe Informació del compte
{
públic estàtica buit Principal ( )
{
// Crea una llista de tipus - Compte.
Detalls de la llista = nou Llista ( ) ;
// Afegeix 5 registres a la llista.
detalls . Afegeix ( nou Compte { Acc_ID = 1 , Acc_Name = 'Linux' , Indústria = 'Educació' , Ingressos = 2500 } ) ;
detalls . Afegeix ( nou Compte { Acc_ID = 2 , Acc_Name = 'Python' , Indústria = 'Camp d'entrenament' , Ingressos = 10000 } ) ;
detalls . Afegeix ( nou Compte { Acc_ID = 3 , Acc_Name = 'Java' , Indústria = 'Educació' , Ingressos = 500 } ) ;
detalls . Afegeix ( nou Compte { Acc_ID = 4 , Acc_Name = '.NET' , Indústria = 'entrenament' , Ingressos = 2080 } ) ;
detalls . Afegeix ( nou Compte { Acc_ID = 5 , Acc_Name = 'Oracle' , Indústria = 'Treball' , Ingressos = 2090 } ) ;

// Creeu un diccionari de la llista anterior amb la clau com a Acc_ID.
Diccionari comptes_dict = detalls . Al Diccionari ( j => j . Acc_ID ) ;
per cadascú ( KeyValuePair i en comptes_dict )
{
Consola . WriteLine ( 'Clau:' + i . clau + '-->  Nom del compte :' + i . Valor . Acc_Name
+ 'Compte-Indústria:' + i . Valor . Indústria
+ 'Compte-Ingressos:' + i . Valor . Ingressos ) ;
}

}
}

// Crea una classe anomenada - Compte amb quatre atributs
públic classe Compte
{
públic int Acc_ID { aconseguir ; conjunt ; }
públic corda Acc_Name { aconseguir ; conjunt ; }
públic corda Indústria { aconseguir ; conjunt ; }
públic int Ingressos { aconseguir ; conjunt ; }
}

Sortida:

Explicació:

Aquí, creem un diccionari amb la clau Acc_ID. Això actua com a clau per a cada registre del diccionari que hem creat a partir de la llista. Després d'això, fem servir el bucle 'foreach' per obtenir les claus i els valors (amb atributs) mitjançant les propietats de clau i valor.

Exemple 3: claus duplicades – ArgumentException

Creeu una llista amb dos registres i proveu de convertir-la en un diccionari amb l'Acc_ID com a clau.

utilitzant Sistema ;
utilitzant System.Linq ;
utilitzant System.Collections.Generic ;

classe Informació del compte
{
públic estàtica buit Principal ( )
{
// Crea una llista de tipus - Compte.
Detalls de la llista = nou Llista ( ) ;
// Afegeix 2 registres a la llista.
detalls . Afegeix ( nou Compte { Acc_ID = 1 , Acc_Name = 'Linux' , Indústria = 'Educació' , Ingressos = 2500 } ) ;
detalls . Afegeix ( nou Compte { Acc_ID = 1 , Acc_Name = 'Python' , Indústria = 'Camp d'entrenament' , Ingressos = 10000 } ) ;

// Intenta crear un diccionari de la llista anterior amb la clau com a Acc_ID.
Diccionari comptes_dict = detalls . Al Diccionari ( j => j . Acc_ID ) ;

}
}

// Crea una classe anomenada - Compte amb quatre atributs
públic classe Compte
{
públic int Acc_ID { aconseguir ; conjunt ; }
públic corda Acc_Name { aconseguir ; conjunt ; }
públic corda Indústria { aconseguir ; conjunt ; }
públic int Ingressos { aconseguir ; conjunt ; }
}

Excepció:

Es genera una excepció no gestionada que és System.ArgumentException, ja que la clau està duplicada (1) en els dos Acc_ID.

Exemple 4: font nul·la – ArgumentNullException

Creeu una llista amb el tipus 'Compte' i assigneu-li null. Intenteu crear un diccionari de la llista anterior amb la clau Acc_ID.

utilitzant Sistema ;
utilitzant System.Linq ;
utilitzant System.Collections.Generic ;

classe Informació del compte
{
públic estàtica buit Principal ( )
{
// Crear una llista de tipus - Compte i assignar-li null.
Detalls de la llista = nul ;

// Intenta crear un diccionari de la llista anterior amb la clau com a Acc_ID.
Diccionari comptes_dict = detalls . Al Diccionari ( j => j . Acc_ID ) ;

}
}

// Crea una classe anomenada - Compte amb quatre atributs
públic classe Compte
{
públic int Acc_ID { aconseguir ; conjunt ; }
públic corda Acc_Name { aconseguir ; conjunt ; }
públic corda Indústria { aconseguir ; conjunt ; }
públic int Ingressos { aconseguir ; conjunt ; }
}

Excepció:

Es genera una excepció no gestionada que és System.ArgumentNullException ja que la llista és nul·la.

Conclusió

Hem après a crear un diccionari a partir de l'IEnumerable (aquí, és una llista) mitjançant el mètode ToDictionary() en C# LINQ. Aquest mètode es pot sobrecarregar de dues maneres. Hem comentat ambdós mètodes amb exemples. A més, hem après els dos casos d'excepció que es plantegen amb aquest mètode quan la font de dades/keySelector/elementSelector és nul i les claus estan duplicades.