C#ToDictionary lambda选择索引和元素?
我有一个像string strn = "abcdefghjiklmnopqrstuvwxyz"
,想要一个字典,如:
Dictionary(){ {'a',0}, {'b',1}, {'c',2}, ... }
我一直在尝试这样的事情
strn.ToDictionary((x,i) => x,(x,i)=>i);
…但是我一直在得到关于委托的各种错误,没有采用两个参数,以及未指明的参数等。
我究竟做错了什么?
我更喜欢对答案的提示,所以我对下次需要做的事情有一个精神上的痕迹,但根据Stackoverflow的性质,答案也很好。
首先使用.Select
运算符:
strn .Select((x, i) => new { Item = x, Index = i }) .ToDictionary(x => x.Item, x => x.Index);
我究竟做错了什么?
你假设存在这样的过载。 看看Enumerable.ToDictionary
– 没有提供索引的重载。 您可以通过调用Select
来伪造它:
var dictionary = text.Select((value, index) => new { value, index }) .ToDictionary(pair => pair.value, pair => pair.index);
你可以尝试这样的事情:
string strn = "abcdefghjiklmnopqrstuvwxyz"; Dictionary lookup = strn.ToCharArray() .Select( ( c, i ) => new KeyValuePair( c, i ) ) .ToDictionary( e => e.Key, e => e.Value );