2

我有

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 中添加什么,才能获得累积点的起点?

4

1 回答 1

1
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);

这通过遍历所有索引来找到最长的运行,查看序列从那里运行多长时间,并选择它最大的索引。

于 2013-05-27T16:57:34.723 回答