[C#入門]第7回 配列変数(3) Tips

はじめに

前回と前々回の記事で、配列変数の基本的な使用方法について説明しました。

今回は、配列変数についてのTipsを紹介します。

配列変数の使用方法については以下の過去記事を参照ください。

目次

  1. 配列の要素数を知るには?
  2. 配列のサイズを変更するには?

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)



コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください