Developer

【初心者Unity】配列のメソッドを使いこなそう!
2021.05.01
Lv1

【初心者Unity】配列のメソッドを使いこなそう!


はじめに

今回は、前回の「配列」のお話に引き続き、配列をより活用する方法をご紹介します。

前回は、「生徒が10人いて、全員のテストの点数をそれぞれ記録し、その点数を「可」か「不可」に評価するプログラムを作成する」という例を用いて配列をご紹介しました。この例では、配列を使わなかった場合、変数が10個も必要になるところが、配列を使うと一行で済ませることができたんでしたよね。しかし変数定義は効率よくできたものの、その下のif文はバラバラで、結果的に全体的に長いままでした。今回はそのif文でさえも配列の力でまとめてしまおうという回になります。そこで出てくるのが配列に用意されているメソッドになります。


実際に配列のメソッドを使ってみる

前回の例で配列を活用したものが↓になります。

int[] scores = { 80,90,70,50,80,60,100,40,80,90 };
if (scores[0] >= 60) {
     Debug.Log( “可” );
} else {
     Debug.Log( “不可” );
}
if (scores[1] >= 60) {
     Debug.Log( “可” );
} else {
     Debug.Log( “不可” );
}
if (scores[2] >= 60) {
     Debug.Log( “可” );
} else {
     Debug.Log( “不可” );
}
if (scores[3] >= 60) {
     Debug.Log( “可” );
} else {
     Debug.Log( “不可” );
}
if (scores[4] >= 60) {
     Debug.Log( “可” );
} else {
     Debug.Log( “不可” );
}
if (scores[5] >= 60) {
     Debug.Log( “可” );
} else {
     Debug.Log( “不可” );
}
if (scores[6] >= 60) {
     Debug.Log( “可” );
} else {
     Debug.Log( “不可” );
}
if (scores[7] >= 60) {
     Debug.Log( “可” );
} else {
     Debug.Log( “不可” );
}
if (scores[8] >= 60) {
     Debug.Log( “可” );
} else {
     Debug.Log( “不可” );
}
if (scores[9] >= 60) {
     Debug.Log( “可” );
} else {
     Debug.Log( “不可” );
}
 

変数定義は1行で済んでいますが、if文が長いですね。。。
これを短く済ませている例が↓になります。

int[] scores = { 80,90,70,50,80,60,100,40,80,90 };
for (int i = 0; i < scores.Length; i++) {
if (scores[i] >= 60) {
     Debug.Log( “可” );
} else {
     Debug.Log( “不可” );
}
}

いかがでしょうか?先ほどの書き方ではif文を10回分書かなければならなかったのに対し、何とメソッドを使うことでif一つ分で済んでしまうんです。これはかなり短くなりましたよね??
因みに、今回は「Length」というメソッドを使っています。このメソッドは配列の要素数を出すことができます。これにより、配列「scores」の要素数が10個であることを求め、その「10」という数字をfor文で活用することによって要素数分、点数を評価するというわけです。

for文について詳しく知りたい方はこちら

【Unity連載】繰り返しをしよう!(for文)


他のメソッド紹介

それでは、「Length」の他にはどのようなメソッドがあるのかここでは紹介していきます。

Contains

こちらは、指定した値が配列の中に存在するかを判定してくれるメソッドです。判定ですので、if文等と組み合わせて使います。
今回は、配列「scores」の中に「40」点の人がいるか判定してみましょう。

int[] scores = { 80,90,70,50,80,60,100,40,80,90 };
if ( scores.Contains( 40 ) ) {
	Debug.Log( “40はscoresに含まれています。” );
} else {
	Debug.Log( “40はscoresに含まれていません。” );
}

このプログラミングでは、scoresの中に40が含まれているため、「40はscoresに含まれています。」が出力されます。

Array.IndexOf

こちらは、指定した値が配列の中の何番目に位置しているのか(インデックス)を教えてくれるメソッドになります。もしも存在しなかった場合は「-1」を返してくれます。
今回は、配列「scores」の中に「90」点の人と「0」点の人のインデックスを調べてみましょう。

int[] scores = { 80,90,70,50,80,60,100,40,80,90 };
int index1 = Array.IndexOf( scores,90 );
int index2 = Array.IndexOf( scores,0 );
Debug.Log( index1 );
Debug.Log( index2 );

このプログラミングでは、scoresの中に「90」が1番目と9番目に存在しています。今回の様に2つ以上存在する場合は、一番最初のインデックスのみ返ってきます。また、「0」は存在しません。よって、「1」と「-1」が出力されます。

Array.Sort

こちらは、指定した配列の値を昇順に並び替えてくれるメソッドになります。
今回は、配列「scores」内の値を昇順に並べ替えてみましょう。

int[] scores = { 80,90,70,50,80,60,100,40,80,90 };
Array.Sort( scores );
for ( int i = 0; i < scores.Length; i++ ) {
	Debug.Log( i );
}

このプログラミングでは、scoresの中身を昇順に並べ替えています。よって、for文で全ての要素を出力した際に出力される順番は、「40」「50」「60」「70」「80」「80」「80」「90」「90」「100」となります。


おわりに

みなさんいかがでしたでしょうか。配列はデータの管理を楽にするのみならず、メソッドを活用することでさらにプログラミングの幅を広げることができます。ぜひみなさん配列を活用して快適なプログラミングライフを過ごしてください。

 
 

連載目次リンク

「初心者のための」Unityゲーム制作 目次
 

Unity実践編 - 目次リンク

実践Unityゲームプログラミング 連載目次