0

プログラムのニーズの一部、つまり long をインデックスとして使用する機能を満たすために、64 ビット リストを作成する必要があると判断しました。List を実装するための Mono コードを調べたところ、何を選択しても、それを使用するには IList のバリエーション (long を使用) を作成する必要があるという一般的な結論に達しました。

さて、私の質問は、この設計への良いアプローチは何だと思いますか? 私は現在 2 つの可能性を考えています -> List は Array クラスの単なるラッパーなので、巨大な配列を使用するように List クラスを書き直すことができます。または、リストのリストを使用するクラスを作成して、必要に応じてデータを維持および拡大することもできます。最初の問題は、大きすぎる配列を選択しているように見えます.2番目の問題は、Remove() やその他のさまざまなメソッドを機能させようとすることです. あなたの考え?

4

1 に答える 1

2

配列はintによるインデックス付けに制限されているため、とにかくそれらの倍数を使用する必要があります。私は直接リストのリストに行きます。CLR内のすべてのオブジェクトは、割り当て用の2Gbの単一メモリチャンクによって制限されることに注意してください。

サイドノート:

  • 途中で挿入/削除操作をサポートする真の4GB+リニアアレイを実装することを計画している場合は、パフォーマンスの期待値を調整するだけです。挿入または削除は遅くなります。このような規模では、配列のみを追加するのが妥当なアプローチかもしれません。
  • 追加/削除が重要な場合は、他のデータ構造、つまりBツリーを検討してください。ほとんどの場合、一定のアクセス時間を犠牲にしますが、合理的になります。
  • 配列がまばらな場合は、代わりに、またはバッキングストレージとして単純な辞書を検討してください。

ここに、大きな配列に関するより詳細な説明へのリンクがあります。

于 2012-09-23T04:13:00.207 に答える