はじめに
前回と前々回の記事で、配列変数の基本的な使用方法について説明しました。
今回は、配列変数についてのTipsを紹介します。
配列変数の使用方法については以下の過去記事を参照ください。
目次
1.配列の要素数を知るには?
配列の要素数を知るにはlengthプロパティを使用します(※プロパティについて詳しくはクラスのところで説明をします)。
以下に1次元〜3次元の要素数をlengthプロパティで取得する例を示します。
1次元配列の要素数は3個、2次元配列の要素数は6個、3次元配列の要素数は18個なので、最後の出力で「data1d.Length = 3」「data2d.Length = 6」「data3d.Length = 12」と表示されます。
[C#版]配列の要素数取得例
// 1次元配列の初期化 var data1d = new[] { 1, 2, 3 }; // 2次元配列の初期化 var data2d = new [,]{ {1, 2, 3}, {4, 5, 6} }; // 3次元配列の初期化 var data3d = new [,,]{ { {1, 2, 3}, {4, 5, 6} }, { {7, 8, 9}, {10, 11, 12} }, { {13, 14, 15}, {16, 17, 18} } }; // 配列の要素数を表示 Console.WriteLine($"data1d.Length = {data1d.Length}"); // 3 Console.WriteLine($"data2d.Length = {data2d.Length}"); // 6 Console.WriteLine($"data3d.Length = {data3d.Length}"); // 18
VB.NETはC#と同様です。こちらはLengthプロパティで要素数を取得することができます。
[VB.NET版]配列の要素数取得例
'1次元配列の初期化 Dim data1d = {1, 2, 3} '2次元配列の初期化 Dim data2d(,) = { {1, 2, 3}, {4, 5, 6} } '3次元配列の初期化 Dim data3d(,,) = { { {1, 2, 3}, {4, 5, 6} }, { {7, 8, 9}, {10, 11, 12} }, { {13, 14, 15}, {16, 17, 18} } } '配列の要素数を表示 Console.WriteLine($"data1d.Length = {data1d.Length}") '3 Console.WriteLine($"data2d.Length = {data2d.Length}") '6 Console.WriteLine($"data2d.Length = {data3d.Length}") '18
JavaはC#と同様にlengthプロパティを使用します。1次元配列の場合は要素数を取得できますが、2次元以上の配列では要素数ではなく次元数が返されます。
要素数を取得したい場合は「配列変数名[インデックス].length」のようにして各要素数を取得する必要があります。
[Java版]配列の要素数取得例
// 1次元配列の初期化 int[] data1d = {1, 2, 3}; // 2次元配列の初期化 int[][] data2d = { {1, 2, 3}, {4, 5, 6} }; // 3次元配列の初期化 int[][][] data3d = { { {1, 2, 3}, {4, 5, 6} }, { {7, 8, 9}, {10, 11, 12} }, { {13, 14, 15}, {16, 17, 18} } }; // 1次元配列の要素数 System.out.println(data1d.length); // 2次元配列の要素数 System.out.println(data2d[0].length + data2d[1].length); // 3次元配列の要素数 System.out.println(data3d[0][0].length + data3d[0][1].length + data3d[1][0].length + data3d[1][1].length + data3d[2][0].length + data3d[2][1].length);
Swiftはcountプロパティを使用します。Java同様に1次元配列の場合は要素数を取得できますが、2次元以上の配列では要素数ではなく次元数が返されます。
要素数を取得したい場合は「配列変数名[インデックス].count」のようにして各要素数を取得する必要があります。
[Swift版]配列の要素数取得例
let data1d: [Int] = [1, 2, 3] let data2d:[[Int]] = [ [1, 2, 3], [4, 5, 6] ] let data3d:[[[Int]]] = [ [ [1, 2, 3], [4, 5, 6] ], [ [7, 8, 9], [10, 11, 12] ], [ [13, 14, 15], [16, 17, 18] ] ]
配列のサイズを変更するには?
1次元配列は、C#では後から配列サイズを変更することができます。
配列サイズを変更するには、以下の書式を使用します。
Arrat.Resize(ref 配列変数名, リサイズ後の要素数);
要素数を元よりも大きくした場合は、既存のデータを残して末尾に新たな要素枠が作成されます。要素数を元よりも小さくした場合は、後ろから要素が削除されます。
2次元以上の配列はリサイズをすることはできません。もしリサイズをしたい場合は、同名の変数に再度配列を初期化(new)する必要があります。この場合は元の値は破棄されます。
[C#版]配列のリサイズ例
var data1d = new[] { 1, 2, 3 }; // 要素数を元よりも1大きくする Array.Resize(ref data1d, 4); // 以下の実行で要素は1,2,3,4になる data1d[3] = 4; // 要素数を減らす // 要素は1と2のみになる Array.Resize(ref data1d, 2);
VB.NETはC#と同様にArray.Resizeで1次元配列の要素数を変更することができます。
[VB.NET版]配列のリサイズ例
'1次元配列の初期化 Dim data1d = {1, 2, 3} '要素数を元よりも1大きくする Array.Resize(Of Integer)(data1d, 4) '以下の実行で要素は1,2,3,4になる data1d(3) = 4 ' 要素数を減らす ' 要素は1と2のみになる Array.Resize(Of Integer)(data1d, 2)
Javaの場合は、C#のようにArray.Resizeのようなメソッドがないため、リサイズをすることはできません。その代わりArrays.copyOfというメソッドがあり、新しい配列に要素をコピーすることができます。
[Java版]配列のリサイズ例
// 1次元配列の初期化 int[] data1d = {1, 2, 3}; // 要素数が4の配列を作成してコピーする int[] new1d = Arrays.copyOf(data1d, 4); // 新しい要素にデータを代入 // new1dは、1,2,3,4 の要素を持つ new1d[3] = 4;
Swiftの場合は、appendメソッドで簡単に要素を追加することができます。
要素を削除する場合はremoveメソッドを使用します。
[Swift版]配列のリサイズ例
var data1d: [Int] = [1, 2, 3] // 配列の最後に値が「4」の要素を追加 data1d.append(4) // インデックスが3の要素を削除 data1d.remove(at: 3)
コメント