C# 转换IEnumerable<;字符串>;查字典
将C# 转换IEnumerable<;字符串>;查字典,c#,dictionary,casting,ienumerable,deferred-execution,C#,Dictionary,Casting,Ienumerable,Deferred Execution,将booldinctinct添加到方法拆分器并检查distinct是否为true后,代码中断。现在的问题不是字典而是IEnumerable,而是dictionary。怎么解决呢? 这就是错误: 无法将类型“System.Collections.Generic.IEnumerable”隐式转换为“System.Collections.Generic.Dictionary”。存在显式转换(是否缺少强制转换?) 以及守则: private Dictionary<string, int> S
booldinctinct
添加到方法拆分器并检查distinct是否为true后,代码中断。现在的问题不是字典而是IEnumerable
,而是dictionary
。怎么解决呢?
这就是错误:
无法将类型“System.Collections.Generic.IEnumerable”隐式转换为“System.Collections.Generic.Dictionary”。存在显式转换(是否缺少强制转换?)
以及守则:
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;
}
专用字典拆分器(字符串[]文件,bool distinct)
{
var query=file
.SelectMany(i=>File.ReadLines(i)
.SelectMany(line=>line.Split(新[]{''},StringSplitOptions.RemoveEmptyEntries))
.天冬酰胺()
.Select(word=>word.ToLower())
.Where(word=>!stopWord.Contains(word))
.Where(word=>!StopWordsPl.Contains(word))
.Where(word=>!popultNetworkwords.Contains(word))
.Where(word=>!word.All(char.IsDigit));
如果(不同)
{
query=query.Distinct();
}
query.GroupBy(word=>word)
.ToDictionary(g=>g.Key,g=>g.Count());
返回查询;
}
ToDictionary
返回您需要的内容。只需返回它,而不是返回query
return query.GroupBy(word => word)
.ToDictionary(g => g.Key, g => g.Count());
GroupBy和ToDictionary不修改底层对象,您可以在query=query.Distinct()上面的几行正确地修改它@尤瓦利扎科夫,我知道!值得指出的是,distinct
代码现在只具有使这里的计数值始终1
的效果。我发现这不太可能是有意的,也看不出distinct
@Ken'ichiMatsuyama有什么用处。这里有一种更有效的方法:.ToDictionary(g=>g.Key,g=>distinct?1:g.Count())代码>。实际上,对计算机和人工代码阅读器来说,调用Distinct
都是不必要的工作。