1

リストの最新のX要素を保持するデータ構造を使用する必要があります。同僚が私にこの解決策をくれました:

        int start = 0;
        const int latestElementsToKeep = 20;
        int[] numbers = new int[latestElementsToKeep];
        for (int i = 0; i < 30; i++)
        {
            numbers[start] = i;
            if (start < numbers.Length - 1)
            {
                start++;
            }
            else
            {
                start = 0;
            }
        }

したがって、これを実行すると、numbers配列の番号は19〜29(最新の20の番号)になります。

それは素晴らしいことですが、現実の世界でこれを使用するのは困難です。これを行う簡単な方法はありますか?

4

3 に答える 3

6

これはかなり標準的なCircular Bufferのようです。私の唯一の提案は、それ用のクラスを作成するか、利用可能なライブラリの1つをダウンロードすることです. Google の検索結果の上位に有望な候補がいくつかあるようです。

于 2012-11-28T22:34:02.053 に答える
1

これを行うより簡単な方法:

int[] numbers = new int[latestElementsToKeep];
for (int i = 0; i < 30; i++)
    numbers[i % latestElementsToKeep] = i;

モジュラス演算子は、 で割ったリマインダーを返しiますlatestElementsToKeep。にi達するlatestElementsToKeepと、最初から開始します。

于 2012-11-28T22:40:55.293 に答える
0

数値の範囲については、次を使用できます。

int keep = 20;
int lastItem = 29;
int[] numbers = Enumerable.Range(lastItem - keep, keep).ToArray();

任意のコレクション (サイズを取得できる場所) から最後のアイテムを取得するには、次を使用できます。

int keep = 20;
someType[] items = someCollection.Skip(someCollection.Count() - keep).ToArray();
于 2012-11-28T22:52:10.937 に答える