2013-05-26 21 views
2

確定的積累點出發點

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 

注:一個開始於圖1和5具有相同的頻率,所以選擇所述第一頻率相同的。

如果事情是發生一次,那麼這就是聚點,例如,如果有在開始一個C:

c 1 1 

我有什麼添加到mostFrequentlyUsedEntriesOfList,也有啓動積分點數?

+0

我不清楚你是什麼意思的「積累點」。我不明白'10'如何與'b'相關,因爲它是積累點。 –

+0

其他人不理解這一點? –

+0

不得不閱讀它幾次,但我現在明白了......得到每個字母**的最長運行順序的基於** 1的起點。所以對於'b',最長的運行順序是5,並且從位置10開始。對於'a',運行時間最長的序列是2,出現了2次,所以只需要取第一個位於'1'的位置。 – davmos

回答

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

通過迭代所有索引,查看序列從那裏運行多長時間,並選擇最大的索引,查找最長的運行時間。

+0

它應該選擇積累開始的地方,而不是最大的地方。 –

+0

也許我應該更好地寫出它。它不會選擇最大索引,而是最長序列與給定項目開始的索引,就像davmos在您的問題的評論中描述的一樣。 – ggPeti

+0

@PeakReconstructionWavelength你可以請最後接受這個答案,它顯然做你的要求,你甚至沒有嘗試過運行它。 – ggPeti