使用Linq生成列表元素索引的映射

Sup*_*est 4 c# linq sorting

我想采取一个List,并生成一个Dictionary将每个元素映射到其中的索引List.我可以这样做,因为List<string>:

var myList = new List<string>{ /* populate list */ };
var orderMap = new Dictionary<string, int>();

foreach (var element in myList)
{
    orderMap[element] = myList.IndexOf(element);
}
Run Code Online (Sandbox Code Playgroud)

基本上,我想采取如下列表:

Apple
Banana
Orange
Run Code Online (Sandbox Code Playgroud)

并返回显示索引的地图:

Apple -> 0
Banana -> 1
Orange -> 2
Run Code Online (Sandbox Code Playgroud)

我怎么能用Linq做到这一点?我认为这样的事情应该有效:

orderMap = myList.Select( x => /* return a key value pair mapping x to myList.IndexOf(x) */ );
Run Code Online (Sandbox Code Playgroud)

但我无法弄清楚它的正确语法.此外,你可以参考用于代表的列表本身Select吗?

Jon*_*eet 9

虽然您可以参考代表中的列表,但通常不是一个好主意.你真的想使用其重载Select提供索引以及值:

var dictionary = list.Select((value, index) => new { value, index })
                     .ToDictionary(p => p.value, p => p.index);
Run Code Online (Sandbox Code Playgroud)

请注意,如果您有任何重复元素,这将抛出异常.