.NET Framework ToDictionary


Esempio

Restituisce un nuovo dizionario dalla sorgente IEnumerable utilizzando la funzione keySelector fornita per determinare le chiavi. Lancia una ArgumentException se keySelector non è iniettivo (restituisce un valore univoco per ogni membro della collezione di origine.) Esistono sovraccarichi che consentono di specificare il valore da memorizzare e la chiave.

var persons = new[] {
    new { Name="Fizz", Id=1},
    new { Name="Buzz", Id=2},
    new { Name="Foo", Id=3},
    new { Name="Bar", Id=4},
};

Specificando solo una funzione selettore di chiave creerai un Dictionary<TKey,TVal> con TKey il tipo di ritorno del selettore di chiave, TVal il tipo di oggetto originale e l'oggetto originale come valore memorizzato.

var personsById = persons.ToDictionary(p => p.Id);
// personsById is a Dictionary<int,object>

Console.WriteLine(personsById[1].Name); //Fizz
Console.WriteLine(personsById[2].Name); //Buzz

Specificando anche una funzione selettore valore creerai un Dictionary<TKey,TVal> con TKey ancora il tipo di ritorno del selettore di chiave, ma TVal ora il tipo restituito della funzione selettore valore e il valore restituito come valore memorizzato.

var namesById = persons.ToDictionary(p => p.Id, p => p.Name);
//namesById is a Dictionary<int,string>

Console.WriteLine(namesById[3]); //Foo
Console.WriteLine(namesById[4]); //Bar

Come detto sopra, le chiavi restituite dal selettore di chiave devono essere uniche. Quanto segue genererà un'eccezione.

var persons = new[] {
    new { Name="Fizz", Id=1},
    new { Name="Buzz", Id=2},
    new { Name="Foo", Id=3},
    new { Name="Bar", Id=4},
    new { Name="Oops", Id=4}
};

var willThrowException = persons.ToDictionary(p => p.Id)

Se non è possibile fornire una chiave univoca per la raccolta di origine, prendere in considerazione l'utilizzo di ToLookup. In superficie, ToLookup si comporta in modo simile a ToDictionary, tuttavia, nella ricerca risultante ogni chiave è abbinata a un insieme di valori con chiavi corrispondenti.