web-dev-qa-db-fra.com

Convertir un tableau en dictionnaire avec la valeur comme index de l'élément et la clé comme élément lui-même

J'ai un tableau tel que -

arr[0] = "Name";
arr[1] = "Address";
arr[2] = "Phone";
...

Je veux créer un Dictionary<string, int> De telle sorte que les valeurs du tableau soient les clés du dictionnaire et les valeurs du dictionnaire soient l'index, afin que je puisse obtenir l'index d'une colonne en interrogeant son nom dans O(1). Je sais que cela devrait être assez simple, mais je n'arrive pas à comprendre.

J'ai essayé -

Dictionary<string, int> myDict = arr.ToDictionary(x => x, x => indexOf(x))

cependant, cela revient -

{(Name, 0), (Address, 0), (Phone, 0),...}

Je sais que cela se produit car il stocke l'index de la première occurrence, mais ce n'est pas ce que je cherche à faire.

30
neuDev33

Vous pouvez utiliser la surcharge de Select qui inclut l'index:

var dictionary = array.Select((value, index) => new { value, index })
                      .ToDictionary(pair => pair.value, pair => pair.index);

Ou utiliser Enumerable.Range:

var dictionary = Enumerable.Range(0, array.Length).ToDictionary(x => array[x]);

Notez que ToDictionary lèvera une exception si vous essayez de fournir deux clés égales. Vous devez réfléchir attentivement à la possibilité que votre tableau contienne deux valeurs égales et à ce que vous voulez faire dans cette situation.

Je serais simplement tenté de le faire manuellement:

var dictionary = new Dictionary<string, int>();
for (int i = 0; i < array.Length; i++)
{
    dictionary[array[i]] = i;
}
64
Jon Skeet

Une autre façon est:

var dictionary = arr.ToDictionary(x => Array.IndexOf(arr, x));
1
Hazy