确定积累点的起点

时间:2013-05-26 21:41:45

标签: c# linq

我有

var mostFrequentlyUsedEntriesOfList = inputList.GroupBy(word => word)
                      .Select(wordGroup => new { Word = wordGroup.Key, Frequency = wordGroup.Count() })
                      .OrderByDescending(word => word.Frequency);

创建具有密钥和频率的对象。

我必须添加到mostFrequentlyUsedEntriesOfList,还有积累点的起点?我的意思是:

示例inputList:

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,还有积累点的起点?

1 个答案:

答案 0 :(得分: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);

通过迭代所有索引,查看序列从那里运行多长时间,并选择最大值的索引,找到最长的运行。