コンテンツへスキップ

レッスン6:④ 配列やリストの要素の繰り返し


概要

配列やリストに要素を代入したり追加する方法を学んできました。ここでは、要素を順番に処理していく繰り返しの方法について学習します。

lesson6-1-2
lesson6-1-3

まずは、for 文を使う方法について紹介します。for 文の基本的な使い方はこちらで解説しています。リストの要素を繰り返し処理する場合、次のように使用します。

List<string> hiragana = new List<string>() { "あ", "い", "う", "え", "お" };
for (int i = 0; i < hiragana.Count; i++)
{
    Console.WriteLine(hiragana[i]);
}

結果は以下のように表示されたでしょうか。hiragana.Count や、hiragana[i] の値について、デバッグ実行を使って確かめてみてください。

lesson6-4-1

次は、foreach 文を使う方法について紹介します。この構文は初めての登場です。以下のような構文をとります。

foreach(型名 変数名 in 配列 or リスト)
{
    // 処理 A
}

実際のプログラムは、以下のようになります。

int[] numbers = { 1, 2, 3, 4 };
foreach (int n in numbers)
{
    Console.WriteLine(n);
}

実行結果は以下のようになると思います。

lesson6-4-2

for 文と foreach 文の使い分けですが、すべての要素に対して処理を行う場合は foreach 文を使うほうが簡単です。奇数や偶数の要素のみ繰り返し処理をするような場合は、for 文を使うとよいでしょう。for 文の後処理(インクリメントなど)で奇数のみ、偶数のみとなるように調整します。

STEP1:C# プログラム(ファイル)を追加する

こちらの記事を参考にして、コンソールアプリ(プロジェクト名:Lesson6)に C# プログラム(ファイル名:Lesson6_4)を追加します。

STEP2:プログラムを記述する

Lesson6_4.cs のプログラムを下記のように変更します。

namespace Lesson6
{
    public static class Lesson6_4
    {
        /// <summary>
        /// 要素を昇順に並び替える
        /// </summary>
        public static void Text1()
        {
            Console.WriteLine("*** 並び替え前 ***");
            List<int> scores = new List<int>();
            scores.Add(2);
            scores.Add(4);
            scores.Add(1);
            scores.Add(3);
            scores.Add(5);
            for (int i = 0; i < scores.Count; i++)
            {
                Console.WriteLine(scores[i]);
            }

            Console.WriteLine("*** 並び替え後 ***");
            scores.Sort();
            foreach (int score in scores)
            {
                Console.WriteLine(score);
            }
        }
    }
}

STEP3:結果を確認する

Sort メソッドを使用すると、リスト内の要素を並び替えることができます。次のような結果が得られたでしょうか。

lesson6-4-3

課題① – 1:宝石を取ったときに得点を獲得する

チュートリアル用のゲームには、コース上に宝石がちりばめられています。この宝石を取ったときに、得点が入るようにプログラミングしてみましょう。下図のように、ヒエラルキーから「Tokens」⇒「Token」を選択します。そして、インスペクターに表示される「TokenInstance」をダブルクリックします。

lesson6-4-4

「TokenInstance.cs」ファイルが開くので、17 行目付近に右下のプログラムを記入します。

lesson6-4-5
private System.Random rnd = new System.Random();
public static List<int> scores = new List<int>();

変数 rnd は、乱数を生成するために使用します

リストに static とついていますが、次のレッスンで説明します
(ここではあまり気にしないでください)

敵を倒したら、1~10 の得点が入ることにします。得点は、リスト(scores)で管理します。「TokenInstance.cs」ファイルの 58行 目付近を、下記のようにプログラミングします。

lesson6-4-6
if (controller != null)
{
    collected = true;

    Debug.Log("*** スコア ***");
    scores.Add(rnd.Next(10) + 1);
    int scoreTotal = 0;
    foreach (int score in scores)
    {
        scoreTotal += score;
        Debug.Log(score);
    }
    Debug.Log("スコア合計:" + scoreTotal);
}

正しくプログラミングされているか、ゲームをプレイしながら Unity のコンソールで確認してみてください。

lesson6-4-7

次に進む

次は、オブジェクト指向について学びます。