Я полагаю, что этот вопрос может частично дублировать другие подобные вопросы, но у меня возникают проблемы с такой ситуацией:IEnumerable <string> словарю <гольца, IEnumerable <string>>
Я хочу, чтобы извлечь из некоторых строк предложений
Например, из
`string sentence = "We can store these chars in separate variables. We can also test against other string characters.";`
Я хочу построить IEnumerable слова;
var separators = new[] {',', ' ', '.'};
IEnumerable<string> words = sentence.Split(separators, StringSplitOptions.RemoveEmptyEntries);
После этого идите Повсеместно все эти words
и принять Елки характер в отличие восходящая Упорядоченный набор символов.
var firstChars = words.Select(x => x.ToCharArray().First()).OrderBy(x => x).Distinct();
После этого пройти через обе коллекции и для каждого символа в firstChars
получить все items
от words
, который имеет first character
равный с current character
и создать Dictionary<char, IEnumerable<string>> dictionary
.
Я делаю это так:
var dictionary = (from k in firstChars
from v in words
where v.ToCharArray().First().Equals(k)
select new { k, v })
.ToDictionary(x => x);
и вот проблема: An item with the same key has already been added.
Whis потому, что в этот словарь Он собирается добавить существующий характер.
я включил GroupBy
расширение в мой запрос
var dictionary = (from k in firstChars
from v in words
where v.ToCharArray().First().Equals(k)
select new { k, v })
.GroupBy(x => x)
.ToDictionary(x => x);
Решение выше, дает делает все ОК, но это дает мне другой тип, чем мне нужно.
Что я должен сделать, чтобы получить в результате кDictionary<char, IEnumerable<string>>dictionary
но неDictionary<IGouping<'a,'a>>
?
Результат, который я хочу, как в изображении ниже: Но здесь я должен перебирать с 2 Еогеасп (ов), который будет показывать мне Ват я хочу ... Я не могу хорошо понять, как это происходит .. .
Любые предложения и советы будут приветствоваться. Спасибо.
Зачем вам писать 'x.ToCharArray(). Сначала()' вместо 'x [0]'? И почему вы используете 'Equals()' вместо '=='? – svick
@svic, это тривиальное решение 'x.ToCharArray(). First()' или 'x [0]' :) 'Equals()' вместо '==' также имеет несущественную значимость. Большая проблема в том, что мне нужен результат 'Dictionary>'. Все ответы перенаправляют меня из словаря на 'ILookup'. Я пытался что-то сделать по предложениям мальчика, но, похоже, я все еще сталкиваюсь с проблемами. Мне не нужно печатать результат на консоли, но отправить этот словарь другому получателю, который требует словаря > 'на входе :) –
meorfi
Одна вещь, которую я понял: вы просите персонажей по возрастанию заказать в «Словаре». За исключением того, что это невозможно, 'Dictionary' не имеет никакого порядка на его клавишах. – svick