我想采用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);
}
基本上,我想采取如下列表:
Apple
Banana
Orange
并返回显示索引的地图:
Apple -> 0
Banana -> 1
Orange -> 2
如何使用Linq执行此操作?我认为这样的事情应该有效:
orderMap = myList.Select( x => /* return a key value pair mapping x to myList.IndexOf(x) */ );
但我无法弄清楚它的正确语法。此外,您是否可以在用于Select
?
答案 0 :(得分:9)
虽然可以引用代表中的列表,但通常不是一个好主意。你真的想要使用Select
的重载来提供索引和值:
var dictionary = list.Select((value, index) => new { value, index })
.ToDictionary(p => p.value, p => p.index);
请注意,如果您有任何重复的元素,这将抛出异常。
答案 1 :(得分:3)
您可以尝试ToDictionary
扩展方法:
int index = 0;
orderMap = myList.ToDictionary(x => x, x => index++);
答案 2 :(得分:0)
看看this overload of ToDictionary<TKey, TValue>()
。函数将输入元素转换为Key和Value。
e.g。
var myList = new List<string>{ /* populate list */ };
var orderMap = myList.ToDictionary(x => myList.IndexOf(x), x => x);
然而,问题的一个问题是myList
的元素不是唯一的。