我有
var mostFrequentlyUsedEntriesOfList = inputList.GroupBy(word => word)
.Select(wordGroup => new { Word = wordGroup.Key, Frequency = wordGroup.Count() })
.OrderByDescending(word => word.Frequency);
这将创建具有“键”和“频率”的对象。
我还必须添加到mostFrequentlyUsedEntriesOfList中,以便还具有累积点的起点?我的意思是:
输入列表示例:
a
a
b
b
a
a
b
b
a
b
b
b
b
b
a
会导致
b 9
a 6
累积点的起始点为(将第一个项目计为1)
b 10
因此,b的出现的起点在位置10。
共:
Word frequency position
b 9 10
a 6 1
注意:a从1和5开始,并且具有相同的频率,因此请选择相同频率的第一个。
如果某件事仅发生一次,那么这就是累积点,例如,如果开头有一个c:
c 1 1
我还必须添加到mostFrequentlyUsedEntriesOfList中,以便还具有累积点的起点?
最佳答案
var mostFrequentlyUsedEntriesOfList = inputList
.GroupBy(word => word)
.Select(wordGroup => new
{
Word = wordGroup.Key,
Frequency = wordGroup.Count(),
Position = Enumerable.Range(0, inputList.Count())
.OrderByDescending(index => inputList.Skip(index).TakeWhile(current => current == wordGroup.Key).Count())
.First() + 1
})
.OrderByDescending(word => word.Frequency);
通过遍历所有索引,查看序列从此处运行多长时间,然后选择最大的索引,可以找到最长的运行时间。
关于c# - 确定累积点的起点,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16763936/