C#ToDictionary lambda选择索引和元素?

时间:2012-03-23 23:01:37

标签: c# delegates lambda anonymous-function todictionary

我有一个像string strn = "abcdefghjiklmnopqrstuvwxyz"这样的字符串,想要一个字典,如:

Dictionary<char,int>(){
    {'a',0},
    {'b',1},
    {'c',2},
    ...
}

我一直在尝试像

这样的事情
strn.ToDictionary((x,i) => x,(x,i)=>i);

...但是我一直在得到关于委托的各种错误,没有采用两个参数,以及未指明的参数等。

我做错了什么?

我更喜欢对答案的提示,所以我对下次需要做的事情进行了精心描述,但根据Stackoverflow的性质,答案也很好。

3 个答案:

答案 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 );