【Unity C#】 配列① 配列変数の基本をわかり易く詳細に説明【初心者向け】

UnityC#

こんな人向け!
・C#始めたばかりだけど配列って何?
・同じデータ型の変数を沢山作るのに疲れた。
・配列で何が出来るの?

ゲーム制作で「ゲームで大量のデータをどうやって扱うんだろう?」とか調べると
当たり前のように配列を使っていたりしますよね。

いきなり配列とか言われてもわからないよ!
という方向けに同じ初心者のえきふるが初心者目線でわかりやすく説明します!

えきふる
えきふる

私も全くの0から勉強した上で書いているので、安心してくださいふる

配列とは

同じ型(intとか)の複数データをひとまとめに格納できる変数のことです。
1ダース12個の「ダース」とか「カートン」みたいな感覚に近いかも?

また、配列に格納された個々の変数のことを要素と言います。

配列のメリット

配列のメリットは

  • 100個の変数など大量のデータを扱う際に修正が少なく済む
  • 表や座標のデータ表示が可能
  • if文などの条件分岐での複雑さを回避できる
  • メモリ効率が同じ数の変数を扱うのより良い
  • 繰り返し処理に強い

配列の記述の基本

具体的に配列の使用方法を見ていきましょう!

配列の記述

配列の記載の仕方は下記となります。

データ型名[] 変数名 = new データ型名[配列の数];

例)
 int[] a = new int[100] 

配列は変数名を宣言(左辺側)しただけでは、実体化されでおらず使用できません。
(入れ物があるだけなので、入れ物の中にデータを入れないといけない)
そこで、newで実体化してあげる(右辺側)必要があるためこういった記載になっています。

左で配列変数を作成し、右のnewで配列変数内部の要素数を宣言して実体化(インスタンス)しています。
int a = 1;とさほど意味は変わりませんね。

インスタンスがわからないという方は下記記事の「class」の項目を確認してみて下さい。

えきふる
えきふる

では実際のプログラムで見ていくふる!

実際の挙動を確認するため、下記のように記述しました。
※Unityゲームエンジンで動かすことを想定しています。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class hairetu : MonoBehaviour
{

    void Start()
    {
        int[] a = new int[5]; //5つの要素があるint型の配列を作成。

        a[0] = 1;
        a[1] = 5;
        a[2] = 10;
        a[3] = 123;
        a[4] = -32;

        Debug.Log(a[3]);
    
}
}

まず、5つの要素を持った配列変数aを作成します。
その後、それぞれの要素に値を入れていきました。

a[0] = 1;

この記述部分で配列aの0番目の要素に1という値を入れています

5つの要素の全てに値を入れ終わったら、
Debug.Logでを使って[3]=aの3番目の要素の値をUnityゲームエンジンのコンソールに表示させます。
表示させると下記のようになりました。

unityゲームエンジンのコンソールでの表示

ちゃんとa[3]に入れた値の数字が表示されています。

これだけだったら、a=123;でもよくない?と思われるかもしれませんが、
数が100個、1000個とあったときはどうでしょう。変数を作るのにウンザリですよね。

また、下記のようにstring型で配列を作成することも可能です。

        string[] a = new string[5];

        a[0] = "木の剣";
        a[1] = "てつの剣";
        a[2] = "はがねの剣";
        a[3] = "ドラゴンキラー";
        a[4] = "妖刀むらさめ";

これは例えば、敵がアイテムを落として手に入れる時に
if文を使ってもしa=1だった時はてつの剣を落とす、なんて言う事をせずとも
a[0]を落とす
と言う処理だけで済むわけです。

このような形で大量のアイテム処理などのif文の省略にも使えますね。

添字(そえじ)

先ほどから使っている[ ]の中の数字を添字と言います。
添字は何番目の箱かを識別するための番号です。
添字は0から始まるので気をつけてください。(要素数が5の時、添字の最大番号は4になる)

えきふる
えきふる

要素数から-1した数が添え字の最後の数になるふる

TIPS:要素数の取り出しかた

ここまで配列の扱い方を見てきましたが、
配列の要素の数=箱の数を数字として取り出したい時もあるかもしれません。
入れられる変数の最大数の確認や、配列の全要素に処理をしたい時などに必要になるかと思います。

要素数を取り出すための記述は

配列の変数名.Length

となります。

実際に試してみましょう。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class hairetu : MonoBehaviour
{

    void Start()
    {
        string[] a = new string[5];

        a[0] = "木の剣";
        a[1] = "てつの剣";
        a[2] = "はがねの剣";
        a[3] = "ドラゴンキラー";
        a[4] = "妖刀むらさめ";

        Debug.Log(a.Length);//ここで要素の数を確認
    
    }
}

上記をUnityゲームエンジンで実行するとコンソールに下記のように出ました。

unityゲームエンジンのコンソールでの表示
えきふる
えきふる

ちゃんと要素数の5が表示されていますふる!

TIPS:要素にインスタンスと同時に初期値を入れる方法

各要素の値はインスタンス化してから後に代入していましたが、
下記の方法で一度に入れることも可能です。

データ型名[] 変数名 = new データ型名[] {値1, 値2, .....};
例)
int[] a = new int[]{1,2,10,20};

また、一番最初の宣言時であればnewを省略して書くことも可能です。

データ型名[] 変数名 = {値1, 値2, .....};
例)
int[] a = {1,2,10,20};
初期化子(イニシャライズ)

上記の値のように{ }で変数の初期値を指定する事を初期化子(イニシャライズ)と言います。

組み合わせての使用例

他の構文と組み合わせての使用例も見ていきましょう。

forと組み合わせ

for文と先程のLengthを組み合わせる事で配列内の全要素に対して
繰り返し処理を行うことができます。

for文の書き方は下記です。

for(初期化式; ループ条件式; ループ更新式)
{
  反復処理
}
例)
for (int a = 0; a < 5; a++)
        {
            Debug.Log(a);
        }

初期化式最初の値
ループ条件式この条件の間、反復処理が繰り返される
ループ更新式ループを繰り返す度に(更新する度に)追加する処理です。
上の例だとループする度にaが+1されていきます。

早速実例を見ていきましょう。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class hairetu : MonoBehaviour
{
    void Start()
    {
        int[] a = new int[5];
        a[0] = 1;
        a[1] = 5;
        a[2] = 10;
        a[3] = 123;
        a[4] = -32;
  
 for (int i = 0; i < a.Length; i++)
        {
            Debug.Log(a[i]);
        }
    }
}

上記のforループの中で
iを最初の添字0から始め
i<a.Lengthのところで i がaの要素数より小さい間は処理をループさせ
ループをするたび i に+1をしてLogとして a[i] の要素に入っている値を出す処理をさせています。

実行するとコンソールには下記のように表示されました。

unityゲームエンジンのコンソールでの表示
えきふる
えきふる

全要素に入っている値が出力されたふる!

foreachと組み合わせ

for文と同じ処理はforeachを使う事で更にシンプルに扱うことができます。
記述の仕方は下記のようになります。

foreach (データ型名 変数 in 配列名) { 処理 }
例)
foreach {int i in a){
i++;
}

では、実際に先程のfor文と同じ処理をforeachで使ってみましょう。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class hairetu : MonoBehaviour
{
    void Start()
    {
        int[] a = new int[5];
        a[0] = 1;
        a[1] = 5;
        a[2] = 10;
        a[3] = 123;
        a[4] = -32;

        foreach (int i in a)//ここでforeach
        {
            Debug.Log(i);
        }
    }
}

こちらをUnityゲームエンジンで実行すると下記のようにコンソールに出ました。

unityゲームエンジンのコンソールでの表示

問題なく全要素が出力されていますね。

ここで気をつけたいのはforeach文では
・foreach (データ型名 変数 in 配列名) { 処理 }
変数部分に順番に配列の要素を代入して要素の数だけ処理を実行していく、と言うことです。

ちなみにこのforeach配列以外のリストディクショナリーなどのコンテナ(コレクション)と呼ばれるものでも使用することが出来ます。

まだ先がある、配列の基本

ここまで配列について説明してきました。
でも、実は…ここまでの配列は1次元=1行分の情報だけの話でした。

実は配列は多次元で扱うことができます。
多次元で扱うと言うのは、表計算の用に行と列の2次元、3Dの用にX軸、Y軸、Z軸の3次元のような世界です。

こちらの記事で詳しく書いてありますので、興味のある方はぜひに〜!

えきふる
えきふる

もうちょっとだけ続くんじゃ!

コメント

タイトルとURLをコピーしました