短縮版:
値の変更の実行が点在する重複値の実行に存在する多数の重複値(double)を含むListオブジェクトがあります。インデックスと値の関連付けを損なうことなく、このListオブジェクトが占めるメモリ内のスペースを減らしたいと思います。また、インデックスをルックアップとして使用して、O(1)アルゴリズムのルックアップ時間をできるだけ近く維持したいと思います。たとえば、要素{0、0.1、0.1、0.1、0.2}を含むリストがある場合、インデックス1、2、または3を指定すると、新しいオブジェクト/エンティティは常に0.1を返します。独自のオブジェクトを作成する(おそらくIListを実装する)か、既存のオブジェクトを使用します。アルゴリズムをO(log(m))にするこれを実装する方法についてのアイデアがあります。ここで、mは同じ値の実行数です(私の例では、実行は1回だけです)。しかし、私は可能であれば自分自身を転がしたくありません。
そのようなオブジェクトはC#用に存在しますか、それとも自分でロールする必要がありますか?
モチベーション/ロングバージョン:
私はいくつかの重い科学的計算を行っているデスクトップアプリケーションを持っています。計算により大量のデータが生成され、そのデータは時間に基づいて編成されます。つまり、時間50の場合、変数x、y、およびzの値があります。時間51の場合、変数x、y、およびzの別の値があります。計算が実行されたすべての時間を含むリストがあります。各変数にはリストがあり、そのインデックスはタイムズリストのインデックスと同じです。つまり、時間配列のインデックス234を見ると、46(秒)の時間が得られる可能性があります。時間46(秒)での各変数の計算は、その変数のリストのインデックス234で見つかります。
そのような変数は約100,000個(したがって100,000個のリスト)ありますが、リストは1回だけです。さらに多くの変数を追加することも期待しています。これは明らかにメモリの問題です。(現時点では少なくとも約200 MBのrawスペース:-))。これは、特定の時間に特定の変数の値を見つける方法としてインデックスを使用したい理由も説明する必要があります。
変数の最初のx個のスロットに0しか含まれないのはかなり一般的です。または、インデックスyの後、変数は最後まで一定に保たれます。値が一定である期間数の最悪のケースは、単一のリストでは約30ですが、より一般的には2〜5です。各配列の合計値の数は通常約250です。
編集:
100,000を超える変数を追加することを期待しているため、これは200MBよりも大きな問題であることに注意してください。この動機の詳細を説明するために、私のアプリは現在約1 GB以上で実行されており、200MBはメモリ使用量を削減するための手間のかからない成果であると考えました。
EDIT2:
説明の非常に重要な編集に気づきました。上記で編集し、ここでも説明しました。リストには実行が含まれている場合がありますが、値がインデックスごとに変化するセクションもあります。だから私が持っているかもしれないリストのより良い例は次のとおりです:
0 0 0 0 0 0 ....(50個の重複する0)... 0.1 0.2 0.4 0.5 0.6 ...(50個の重複する値)... 200.45 200.45 200.45 200.55 ...(50個の重複する値).. ..など