C#将文件归档到字典中,但需要成对的单词

C#将文件归档到字典中,但需要成对的单词,c#,string,linq,dictionary,C#,String,Linq,Dictionary,我正在考虑制作一本包含单词对和单个单词的字典 标准的“单字”看起来像: private Dictionary<string, int> tempDict = new Dictionary<string, int>(); private void GetWords(string[] file) { tempDict = file .SelectMany(i => File.ReadLines(i) .SelectMany(line => li

我正在考虑制作一本包含单词对和单个单词的字典

标准的“单字”看起来像:

private Dictionary<string, int> tempDict = new Dictionary<string, int>();
private void GetWords(string[] file)
{ 
   tempDict = file
   .SelectMany(i => File.ReadLines(i)
   .SelectMany(line => line.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries)))
   .GroupBy(word => word)                    
   .ToDictionary(g => g.Key, g => g.Count());
}
private Dictionary tempDict=new Dictionary();
私有void GetWords(字符串[]文件)
{ 
tempDict=文件
.SelectMany(i=>File.ReadLines(i)
.SelectMany(line=>line.Split(新[]{''},StringSplitOptions.RemoveEmptyEntries)))
.GroupBy(word=>word)
.ToDictionary(g=>g.Key,g=>g.Count());
}
和字符串:

亚当喜欢咖啡

将是:

亚当;喜欢;咖啡

但我想让它也匹配成对的(但只匹配相邻的),这样它看起来就像:

亚当;亚当喜欢;喜欢;喜欢咖啡;咖啡

我不确定这是否可以管理,需要一些帮助。

有一个
可枚举的.Pairwise
,它接受当前值和前置值以及一个投影函数

返回将函数应用于源序列中的每个元素及其前置元素所产生的序列,但第一个元素除外,该元素仅作为第二个元素的前置元素返回

将其与原始分割值数组连接将输出:

var sentence = "Adam likes coffee";
var splitWords = sentence.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
var pairWise = splitWords.Pairwise((first, second) => string.Format("{0} {1}", first,
                                                                               second))
                         .Concat(splitWords)
                         .GroupBy(x => x)
                         .ToDictionary(x => x.Key, x => x.Count())
将导致:


你在寻找LINQ解决方案吗?@AlexeiLevenkov更喜欢如何对结果进行分组?@YuvalItzchakov字典,由它组成,看起来像
{Adam,1}{Adam likes,1}
等等。那么按短语分组呢?如果我对文件中的单词做更多的工作,例如
.ToLower()
.Distinct()
我是否需要在这两个文件中都使用它?因为从我的判断来看,第一个字母仅仅是一个字符串,如果只在第二个字母中,那么它应该在
.Concat()
之后吗?在
拆分
之后,您可以在使用
var lowerCased=句子.Split(new[]{'>,StringSplitOptions.removemptyentries)处理之前将所有字母小写。选择(string=>string.ToLower());
@YuvalItzchakov-既然
Zip
就可以了,为什么要使用非标准的
Pairwise