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 から始まるので、同じ頻度の最初のものを選択します。

何かが 1 回だけ発生している場合、これが蓄積ポイントです。たとえば、最初に c が 1 つあった場合は、次のようになります。

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 に答える