我想采取一个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
吗?
虽然您可以参考代表中的列表,但通常不是一个好主意.你真的想使用其重载Select
提供索引以及值:
var dictionary = list.Select((value, index) => new { value, index })
.ToDictionary(p => p.value, p => p.index);
Run Code Online (Sandbox Code Playgroud)
请注意,如果您有任何重复元素,这将抛出异常.