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