2015-05-20 7 views
3

после добавления bool distinct в метод Разветвитель и проверка, если distinct is true код сломался. Теперь вместо словаря quesry является IEnumerable<string>, но может быть Dictionary<string, int>. Как это можно решить?Преобразование IEnumerable <string> в словарь

Это ошибка:

Cannot implicitly convert type 'System.Collections.Generic.IEnumerable' to 'System.Collections.Generic.Dictionary'. An explicit conversion exists (are you missing a cast?)

И код:

private Dictionary<string, int> Splitter(string[] file, bool distinct) 
{ 
    var query = file 
     .SelectMany(i => File.ReadLines(i) 
     .SelectMany(line => line.Split(new[] {' '}, StringSplitOptions.RemoveEmptyEntries)) 
     .AsParallel() 
     .Select(word => word.ToLower()) 
     .Where(word => !StopWords.Contains(word)) 
     .Where(word => !StopWordsPl.Contains(word)) 
     .Where(word => !PopulatNetworkWords.Contains(word)) 
     .Where(word => !word.All(char.IsDigit))); 
     if (distinct) 
     { 
     query = query.Distinct(); 
     } 

     query.GroupBy(word => word) 
      .ToDictionary(g => g.Key, g => g.Count()); 
     return query; 
} 
+2

GroupBy и ToDictionary не изменяют базовый объект, вы делаете это правильно несколько строк над запросом = query.Distinct(); – Andrey

ответ

12

ToDictionary возвращает то, что вам нужно. Просто верните это, а не возвратите query.

return query.GroupBy(word => word) 
      .ToDictionary(g => g.Key, g => g.Count()); 
+0

Вы правы, спасибо! –

+0

100k близко ... :) –

+0

@YuvalItzchakov я знаю! –

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