我有

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/

10-08 21:32