配列
練習課題
C#を読みましょう
以下の表は、C#で書いた命令とその日本語の意味が書いてある。空枠を完成してください。
|
C# |
日本語 |
|
10個の整数が入る「numbers」という配列を作成 |
|
答え整数型の配列を宣言のみ(初期化なし) |
|
答え5個の文字列が入る「names」という配列を作成 |
答え
|
「names」配列の一番最初(先頭)は「たろう」にする |
答え
|
「names」配列の一番最後(後尾)は「おおはら」にする |
|
答え先頭から4つ目の要素を変数「a」の中に代入 |
答え
|
少数型の配列「distances」を宣言し、1.3f, 4.5f, 7.9f の3つの数値で初期化する |
C#の処理を完成してみましょう
1.配列とfor文を使い、以下のスクリプトを完成してください(UnityでもOK)
※:文字列の長さは「変数名.Length」で求めることができる
例:
string s = "Hello!";
int size = s.Length; // 文字列「s」の長さを求める
Debug.Log(size); // 6 を表示する
※:期待の結果は「最も長いフルーツ名は: grapefruit」
// フルーツの名前の配列
string [] fruits = ["lemon", "mikan", "orange", "grapefruit", "kiwi"];
// 最も長い文字列(結果)
string maxFruit = "";
// フルーツ1個ずつ確認
for (________; _________; ________)
{
// i番目のフルーツを求める
string f = _______________;
// もし、今回のフルーツ名の方が長ければ
if (f.Length > maxFruit.Length)
{
// 最も長いフルーツを更新
___________________;
}
}
// 最大の長さのフルーツ名を表示
Debug.Log($"最も長いフルーツ名は: {______________}");
答え
// フルーツの名前の配列
string [] fruits = ["lemon", "mikan", "orange", "grapefruit", "kiwi"];
// 最も長い文字列(結果)
string maxFruit = "";
// フルーツ1個ずつ確認
for (int i = 0; i < 5; i++)
{
// i番目のフルーツを求める
string f = fruits[i];
// もし、今回のフルーツ名の方が長ければ
if (f.Length > maxFruit.Length)
{
// 最も長いフルーツを更新
maxFruit = f;
}
}
// 最大の長さのフルーツ名を表示
Debug.Log($"最も長いフルーツ名は: {maxFruit}");
2.配列とfor文を使い、以下のスクリプトを完成してください(UnityでもOK)
// 4人分のスコア(整数型)の配列を準備してください
_____ scores = ___________;
//1人目のスコアは100点
__________= 100;
//2人目のスコアは80点
__________= 80;
//3人目のスコアは180点
__________= 180;
//4人目のスコアは20点
__________= 20;
// 同様に、4人分の名前(文字列型)の配列を準備してください
// それぞれの名前は「太郎」「さくら」「オオハラ」「Unity」
______ names = __________;
_______________;
_______________;
_______________;
_______________;
// for文を使って一人ずつのプレーヤーとスコアを表示する
for (________; _________; ________)
{
Debug.Log($"名前:{________} → {_________}");
}
答え
// 4人分のスコア(整数型)の配列を準備してください
int[] scores = int[4];
//1人目のスコアは100点
scores[0] = 100;
//2人目のスコアは80点
scores[1] = 80;
//3人目のスコアは180点
scores[2] = 180;
//4人目のスコアは20点
scores[3] = 20;
// 同様に、4人分の名前(文字列型)の配列を準備してください
// それぞれの名前は「太郎」「さくら」「オオハラ」「Unity」
string[] names = string[4];
names[0] = "太郎";
names[1] = "さくら";
names[2] = "オオハラ";
names[3] = "Unity";
// for文を使って一人ずつのプレーヤーとスコアを表示する
for (int i = 0; i < 4; i++)
{
Debug.Log($"名前:{names[i]} → {score[i]}");
}
自由に伸びる配列 : List
配列を作るときに、事前にサイズを決めないといけないが、場合により、サイズが分からない可能性がある。例えば、同じゲームでも、プレーヤーによって拾うアイテムの数が変わるので、事前にアイテムの配列のサイズが分からない。
その場合は、サイズが自動的に変わる「リスト」を使うと便利。「List」は、要素を増やすほど、段々サイズが伸びる"配列"(正しい名称は「コレクション」)である。
便利であるが、弱点もある:リストは配列と比べて処理が遅い。数十~数百の要素以内だったら、あまり違いがないが、要素を増やすほど(数万程度)、Listの方が明らかに遅い。
Listの宣言、使い方
List<型> 変数名;
代入(作成)
変数名 = new List<型>();
例:
// 名前のリストを作成
List<string> names = new List<string>();
// リストに名前を追加する
names.Add("たろう");
names.Add("さくら");
names.Add("おおはら");
// 0番目の名前を表示(配列と同じ)
Debug.Log(names[0]); // 「たろう」を表示
// 要らなくなった場合、リストから削除できる
names.Remove("たろう");
// 0番目の名前を表示(配列と同じ)
Debug.Log(names[0]); // 「さくら」を表示
練習
プレーヤーのスコアを表示するスクリプトを配列からリストに書き換える
答え
// スコア(整数型)のリストを準備してください
List<int> scores = new List<int>();
//1人目のスコアは100点
scores.Add(100);
//2人目のスコアは80点
scores.Add(80);
//3人目のスコアは180点
scores.Add(180);
//4人目のスコアは20点
scores.Add(20);
// 同様に、4人分の名前(文字列型)の配列を準備してください
// それぞれの名前は「太郎」「さくら」「オオハラ」「Unity」
List<string> names = new List<string>();
names.Add("太郎");
names.Add("さくら");
names.Add("オオハラ");
names.Add("Unity");
// for文を使って一人ずつのプレーヤーとスコアを表示する
for (int i = 0; i < 4; i++)
{
Debug.Log($"名前:{names[i]} → {score[i]}");
}