重複の可能性:
C# の多次元配列と配列の配列の違いは何ですか?
と の違いを説明できる人はいますstring[][]
かstring[,]
?
重複の可能性:
C# の多次元配列と配列の配列の違いは何ですか?
と の違いを説明できる人はいますstring[][]
かstring[,]
?
string[,]
-多次元配列(長方形配列)
多次元は、複数の次元を持つことができます。次の例は、2 行 2 列の 2 次元配列を作成する方法を示しています。
宣言 :
string[,] contacts;
インスタンス化:
string[,] contacts = new string[2,2];
初期化:
string[,] contacts = new string[2, 2] { {"John Doe","johndoe@example.com"}, {"Jane Doe","janedoe@example.com"} };
string[ ][ ]
-ジャグ配列(Array-of-arrays)
ジャグ配列は、要素が配列である配列です。ジャグ配列の要素は、さまざまな次元とサイズにすることができます。ジャグ配列は、「配列の配列」と呼ばれることがあります。
ジャグ配列は、さまざまな長さの多数の行を効率的に格納できます。任意のタイプのデータ、参照または値を使用できます。ジャグ配列のインデックス作成は高速です。それらの割り当てはやや遅いです。
ジャグ配列は多次元配列よりも高速です
宣言 :
string[][] contacts;
インスタンス化:
string[][] contacts = new string[2][];
for (int i = 0; i < contacts.Length; i++)
{
contacts[i] = new string[3];
}
初期化:
string[][] contacts = new string[2][] { new string[] {"john@example.com","johndoe@example.com"}, new string[] {"janedoe@example.com","jane@example.com","doe@example.com"} };
違いには次の 2 つの側面が重要です。
メモリに関して:
[n,m] - [n*m] [n][m] - サイズ n の単純な配列として保存されます。各要素はサイズの配列へのポインターです。メートル。
アクセスに関して:
[n,m] - セル i,j にアクセスするには、[n*m] 配列のポインターを取得し、n*width+m だけオフセットしてから、値にアクセスします。[n][m] - セル i,j にアクセスするには、インデックス n (オフセット #1) でサブ配列ポインターにアクセスし、インデックス m (オフセット #1) でサブ配列にアクセスします。
[][] 両方の面で優れています。アクセスがより効率的になり、メモリがより柔軟になります。また、その行の各セルに対して完全な多次元アクセスを実行しないため、1 つの行に 1 回アクセスするだけで、さらに効率的に処理できます。
ただし、[,] には利点があります。行列の幅が固定されていることが常にわかります。[][] を使用すると、各サブ配列は異なる長さを持つことができ、null にすることもできます。これは利点と見なすことができますが、場合によってはその逆も役立ちます。
string[][]
(ジャグ配列)は固定数の行と可変長の列を持つ配列の配列ですが、string[,]
(長方形配列)は固定数の行と列を持つ行列です。そこでは良い議論が行われています