将数组转换为字典,将值作为项的索引,将键作为项本身

我有一个数组,如 –

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

我想创建一个Dictionary这样数组值将成为字典键,字典值将成为索引,这样我就可以通过在O(1)查询其名称来获取列的索引。 我知道这应该是相当简单的,但我无法理解它。

我试过了 –

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

然而,这回来了 –

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

我知道这是因为它存储了第一次出现的索引,但那不是我想要做的。

您可以使用包含索引的Select的重载:

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

或者使用Enumerable.Range

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

请注意,如果您尝试提供两个相等的键, ToDictionary将引发exception。 你应该仔细考虑你的数组中有两个相等值的可能性,以及你想在那种情况下发生什么。

我只是想手动操作:

 var dictionary = new Dictionary(); for (int i = 0; i < array.Length; i++) { dictionary[array[i]] = i; } 

另一种方式是:

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