Ответ 1
Сначала используйте оператор .Select
:
strn
.Select((x, i) => new { Item = x, Index = i })
.ToDictionary(x => x.Item, x => x.Index);
У меня есть строка типа string strn = "abcdefghjiklmnopqrstuvwxyz"
и вам нужен словарь вроде:
Dictionary<char,int>(){
{'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<char,int> lookup = strn.ToCharArray()
.Select( ( c, i ) => new KeyValuePair<char,int>( c, i ) )
.ToDictionary( e => e.Key, e => e.Value );