2015-12-27 1 views
3

Я пытаюсь войти в файл, извлечь слова в файле и сгруппировать каждую букву в строке файла. Группировка должна быть упорядочена по ее букве (a, b, c, d, ect ..), а затем подсчитать каждую букву и представить количество каждой буквы на консоль: примерноИспользование GroupBy в linq для группировки букв строки

a: 56 b : 34 c: 53 d:

Так что я работаю со следующим кодом, но я не думаю, что он работает так, как я этого хочу, есть ли у кого-нибудь идеи? Благодаря!

var text = System.IO.File.ReadAllText("file.txt"); 
     var upper = text.ToUpper(); 
     var alpha = upper.Where(char.IsLetter).ToArray(); 
     var grouped = alpha.GroupBy(i => i % 26); 
     var a = grouped.First(g => g.Key == 0).Count(); 

ответ

3

Что-то, как это должно работать:

var text = System.IO.File.ReadAllText("file.txt"); 
var dictionary = new Dictionary<char,int>(); 
//count every letter 
foreach (var symbol in text) 
{ 
    //skip non letter characters 
    if (!char.IsLetter(symbol)) 
     continue; 

    var key = char.ToLower(symbol); 
    if (dictionary.ContainsKey(key)) 
     dictionary[key]++; 
    else 
     dictionary.Add(key,1); 
} 
//result output 
foreach (var pair in dictionary.OrderBy(p => p.Key)) 
{ 
    Console.Write("{0}: {1} ", pair.Key, pair.Value); 
} 

Это не наименьшее решение, но лучше, чем группировка с точки зрения использования ресурсов.

0

Вы работаете над буквами, а не с буквами.

Вам нужно Split(' '), чтобы получить последовательность строк с отдельными словами.

Затем вы можете группировать по первой букве в каждом слове.

3

Вам нужен Select после GroupBy, чтобы получить необходимые результаты:

var result = text 
    .ToUpper() 
    .Where(char.IsLetter) 
    .GroupBy(c => c) 
    .Select(g => new { Letter = g.Key, Count = g.Count() }); 

Тогда для форматирования результатов "a: 56 b: 34 c: 53" можно использовать string.Join и string.Format:

string formattedResult = string.Join(" ", result.Select(x => string.Format("{0}: {1}", x.Letter, x.Count))); 
+0

хорошее решение, но я подумайте, что вы должны добавить заказ на заказ –

Смежные вопросы