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.
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;
}
Une autre façon est:
var dictionary = arr.ToDictionary(x => Array.IndexOf(arr, x));