私はこの質問を純粋な好奇心から尋ねます。熟考するための実際のコードはありません。
リストのリストの代わりにジャグ配列を使用するための最良のシナリオはありますか?その逆もありますか?
aList<T>
は配列であり、クラスにラップされているだけなので、自由に再割り当てしてサイズを変更できます。それ以外の場合、2 つの間のパフォーマンスは同一と見なすことがList<List<T>>
できます。いずれかの次元のサイズを変更する必要がある場合にのみ使用してください。0 番目の次元のサイズを変更するたびに、1 番目の次元で新しいインスタンスを構築する必要があることを忘れないでください。これにはコストがかかる可能性があります。
n 次元配列 (つまりT[,]
) を忘れました。ただし、.NET の境界チェックの癖により、これらは実際にはジャグ配列や 1 次元のユーザー管理配列よりも遅く、これは完全な謎です。
ジャグ配列とリストのリストには、プレーンなリストと配列と同じ相対的なメリットがあります。
aの主な利点は、List<T>
拡大および縮小できることです。ただし、通常はバッキングストアに大量の余分なスペースを保持し、拡張するたびに新しいアレイを再割り当てする必要がないため、メモリ内で多くの余分なスペースを占有する可能性があります。
配列の主な利点は、コンパクトであるということです。配列に含まれる要素の数を格納するのに十分なスペースがあり、それ以上はありません。ただし、そのサイズは静的です。新しいアイテムを追加する必要がある場合は、既存のアイテムを置き換えるか、手動でより大きな配列を作成してデータをコピーする必要があります。
速度に関しては、実用的な範囲で同じように動作する必要があります。 List<T>
バッキングストアに配列を使用するため、間接層が余分にあるため、同等の配列よりも少し遅くなる可能性があります。ただし、注意深い測定がなければ、フレームワークやCLRのバージョンが異なると変更される可能性があるかどうか、またどの程度の測定が行われるかはわかりません。
は相互運用List<T>
性が高いため、柔軟性が高いと言えます。T[]
たとえば、未知のサイズのリストを作成したい場合は、List<T>
. Web サービスからリストを返す場合は、T[]
.
ここでは 1 次元のリストについて言及していることはわかっていますが、同じ方法が複数の次元にも適用されます。