【学習】List で人数を増やす(変数名を増やさない)
前回の クラスでまとめる では、Player で名前と HP をひとまとまりにしました。
しかし、次の壁にぶつかります。
人数が増えるほど、Player p1, p2, p3, ... と変数が増えそう
という不安です。
今回は 変数名の個数ではなく、データの個数 で人数を増やす方法として List<Player> を使います。
ソリューションとプロジェクトを作る
- テンプレート: コンソール アプリ
- プロジェクト名:
ClassAwakening02(任意)
ファイル先頭に using System.Collections.Generic; が必要です。
違和感の出発点
3人分を、変数で持とうとします。
Player p1 = new Player("勇者A", 100);
Player p2 = new Player("勇者B", 100);
Player p3 = new Player("勇者C", 100);
動きます。でも次を想像してください。
- 10人にしたい
- 人数は 実行するときに決めたい
このとき p10 まで書くのは、もう 別のやり方 を探したくなります。
List という「入れ物」
同じ型のデータを、順番付きでたくさん入れられる のが List です。
List<Player> players = new List<Player>();
List<Player> は読み方でいうと 「Player の List」 です。
人数は Add で増やす
players.Add(new Player("勇者A", 100));
players.Add(new Player("勇者B", 100));
players.Add(new Player("勇者C", 100));
増えたのは players の中身 であって、変数 p1 p2 p3 を増やしていません。
全員の HP を表示したい(まずは添字で)
foreach は次回にまわして、まず 番地で取り出す やり方だけ見ます。
for (int i = 0; i < players.Count; i++)
{
Player p = players[i];
Console.WriteLine($"{p.Name} HP={p.Hp}");
}
Count… 今入っている個数players[i]… i 番目のPlayer
ここで考えてみる
表示1行は for で書けました。
でも、次のような処理を考えるとどうでしょう。
- 全員にダメージ
- 全員を回復
- HP が 0 の人だけスキップ
毎回 for を書くのは悪くない のですが、C# ではもうひとつ 読みやすい書き方 があります。
それが次回の foreach です。
完成コード(例)
using System;
using System.Collections.Generic;
namespace ClassAwakening02
{
class Player
{
public string Name;
public int Hp;
public Player(string name, int hp)
{
Name = name;
Hp = hp;
}
}
internal class Program
{
static void Main(string[] args)
{
List<Player> players = new List<Player>();
players.Add(new Player("勇者A", 100));
players.Add(new Player("勇者B", 100));
players.Add(new Player("勇者C", 100));
for (int i = 0; i < players.Count; i++)
{
Player p = players[i];
Console.WriteLine($"{p.Name} HP={p.Hp}");
}
}
}
}
プログラムの流れ
List を new する
↓
Add で Player を追加(人数が増える)
↓
Count と添字 [i] で1人ずつ扱う
重要ポイント
- 増やしたいのはデータの個数 であって、ソース上の変数名の個数ではない
List<Player>はPlayerの入れ物 と考えると迷いにくい- 全員に同じ処理を書きたいときは、次回の
foreachが相性よい
最後の問い
全員に 10 ダメージを与えるとしたら、players[0] players[1] players[2] と 3行書く のは気持ちよいですか?
- 気持ち悪いと感じたら、その直感は正しいです。次は foreach で全員に同じ処理 へ。
発展アイデア
- List の別角度の解説: C# List の使い方
- クラス気づき学習シリーズ(目次)




ディスカッション
コメント一覧
まだ、コメントがありません